2016-05-12 50 views
0
public static string GetFuncName<T1, T2>(Func<T1, T2> func){ 
    return func.Method.Name; 
} 

我使用此代码可以得到“string function(string)”结构方法的名称。我无法通过func获取c#方法名称<T1,T2>

但我无法获得“void function()”结构方法的名称。

“GetFuncName(xxx)”引发volid错误。

最后我需要得到“void function()”这个名字。

+0

你会得到什么错误? –

+0

如果您需要调用函数,如:var demo = GetFuncName(new Func (x => x.CountryName)); –

回答

1

对于一个void,你需要一个Action<>类型的委托,而不是一个Func委托。

所以,你需要另一种方法

public static string GetActionName<T1>(Action<T1> action){ 
    return action.Method.Name; 
} 
+0

非常感谢。我需要找到入侵。它运作良好。现在我可以使用“CancelInvoke(GetFuncName(actionCancelShaking));”和“Invoke(GetFuncName(actionCancelShaking),.05f);”而不是功能名称。强大的代码。 – zszen

+0

我定义了两个“public static string GetFuncName (Action action)”和“public static string GetFuncName(Action action)” – zszen

0

你总是可以通过Delegate.Method.Name获得方法名。 IMO你的方法不一定是通用的。

public static string GetDelegateName(Delegate instance) 
{ 
    return instance.Method.Name; 
}