我知道這個網站上有幾個答案,我很抱歉,如果這是以任何方式重複,但我發現的所有的都不做我想要的做。使用表達式獲取方法的名稱
我想指定方法信息,所以我可以通過不使用字符串以類型安全的方式獲取名稱。 所以我試圖用表達式來提取它。
說,我想在此界面獲得方法的名字:
MemberInfo GetMethodInfo<T>(Expression<Action<T>> expression)
{
return ((MethodCallExpression)expression.Body).Method;
}
我可以調用輔助方法如下:
public interface IMyInteface
{
void DoSomething(string param1, string param2);
}
目前我可以用這種方法獲取名稱:
var methodInfo = GetMethodInfo<IMyInteface>(x => x.DoSomething(null, null));
Console.WriteLine(methodInfo.Name);
但是我正在尋找版本,我可以得到的方法名稱沒有指定參數(NULL,NULL)
這樣的:
var methodInfo = GetMethodInfo<IMyInteface>(x => x.DoSomething);
但所有嘗試都失敗編譯
有沒有辦法做到這一點?
目前沒有VS,但我認爲你應該嘗試在非泛型替代方法中接受'Delegate'或'Action'。在這種情況下,您應該可以傳遞方法組 –
Snowbear
如果將輸入更改爲委託,它將不會編譯,並且錯誤無法將方法組轉換爲委託。如果我將其更改爲Action <字符串,字符串>它似乎工作,但表達式轉換爲UnaryExpression和該方法爲空,我不能看到從UnaryExpression – Andre
affer轉換得到此。你嘗試過'var methodInfo = GetMethodInfo(DoSomething);'而不是'var methodInfo = GetMethodInfo (x => x.DoSomething);'?此外,我仍然認爲指定(默認(字符串),默認(字符串)) - 更具可讀性,並且您可以在這種情況下支持重載方法 –