我知道有可能檢索屬性名稱或返回類型的方法。但是也可以通過LINQ表達式樹來獲得沒有返回類型的方法名稱?LINQ是否有可能通過LINQ表達式樹得到沒有返回類型的方法名?
例如:string methodname = GetMethodname(x => x.GetUser());
--->的結果:「的getUser」
我知道有可能檢索屬性名稱或返回類型的方法。但是也可以通過LINQ表達式樹來獲得沒有返回類型的方法名稱?LINQ是否有可能通過LINQ表達式樹得到沒有返回類型的方法名?
例如:string methodname = GetMethodname(x => x.GetUser());
--->的結果:「的getUser」
絕對 - 但你會想這樣的方法簽名:
public static string GetMethodName<T>(Expression<Action<T>> action)
(這意味着你將需要指定類型參數時,你怎麼稱呼它,才能使用lambda表達式)
示例代碼:
using System;
using System.Linq.Expressions;
class Test
{
void Foo()
{
}
static void Main()
{
string method = GetMethodName<Test>(x => x.Foo());
Console.WriteLine(method);
}
static string GetMethodName<T>(Expression<Action<T>> action)
{
MethodCallExpression methodCall = action.Body as MethodCallExpression;
if (methodCall == null)
{
throw new ArgumentException("Only method calls are supported");
}
return methodCall.Method.Name;
}
}
你會NE ED是這樣的方法:
public static string GetMethodName<T>(Expression<Action<T>> expression) {
if (expression.NodeType != ExpressionType.Lambda || expression.Body.NodeType != ExpressionType.Call)
return null;
MethodCallExpression methodCallExp = (MethodCallExpression) expression.Body;
return methodCallExp.Method.Name;
}
呼叫這樣的:GetMethodName<string>(s => s.ToLower())
將返回 「ToLower將」。
如何從指定類型獲取方法名稱?即表達式 >>? –
Shimmy
2012-01-26 06:26:12
@Shimmy:說實話,你的意思並不清楚。可能值得一個新的問題? – 2012-01-26 06:28:31
我想要這個函數:'靜態MethodInfo GetMethod(Expression >> method)',[here](http://rextester.com/XUQI41513)是我到目前爲止嘗試過的,但它返回'Delegate.CreateDelegate'方法。 –
Shimmy
2012-01-26 06:36:38