我想做一些相當簡單的事情,但不確定是否有任何方法只需創建我的類的虛擬實例。獲取靜態方法內的非靜態方法名稱
我試圖用一些簡單的代碼來簡單地得到一個非靜態方法的方法名稱:
static string GetMethodName(Func<string, int> function )
{
return function.Method.Name;
}
但是我想從MyStaticMethod像這樣,當然這是抱怨稱這樣的:
private static void MyStaticMethod()
{
var a = GetMethodName(MyNonStaticMethod);
}
private int MyNonStaticMethod(string param1)
{
return 0;
}
有沒有什麼辦法可以在不創建包含類的虛擬實例的情況下完成此任務?顯然我的情況更復雜,我不能簡單地讓我的非靜態方法靜態(它需要一個實例並具有依賴關係綁定)。只是想知道這是否可能,因爲我需要的只是名稱(所以實際上不需要實例)。我試圖擺脫魔法字符串,並且在事情發生變化時想要一些編譯時錯誤。
編輯:我創建了一個靜態輔助類
我有一個通用的方法:
public static string GetMemberName<T>(
Expression<Func<T, object>> expression)
{
if (expression == null)
{
throw new ArgumentNullException("expression");
}
return _GetMemberName(expression.Body);
}
private static string _GetMemberName(
Expression expression)
{
if (expression is MemberExpression)
{
var memberExpression =
(MemberExpression)expression;
return memberExpression.Member.Name;
}
if (expression is MethodCallExpression)
{
var methodCallExpression = (MethodCallExpression)expression;
return methodCallExpression.Method.Name;
}
if (expression is UnaryExpression)
{
var unaryExpression = (UnaryExpression)expression;
return GetMemberName(unaryExpression);
}
throw new ArgumentException("Unrecognized expression");
}
請標記相關語言 –
本質上你問:_how我可以創建一個'Func'委託,指向一個實例方法,但沒有任何特定的實例嗎?_ –
Virtlink
以及..當然,我不需要委託,如果我可以只是通過其他一些方法學獲得方法名稱,只是發佈我爲了清晰起見而要做的事情。我明白你要去哪裏,很明顯,如果有解決方案,它不能使用實際的實例方法。我真的只想做MyNonStaticMethod.ToString()!!! – Zom