在c#中获取函数名称

The*_*ler 12 c# unity-game-engine

在Unity中使用coroutines或InvokeRepeating时,您必须提供一个字符串,其中包含您要调用的函数的名称.虽然如果更改该函数的名称会很痛苦,因为您必须记住更改使用它的协同程序.这样做有更干净的方法吗?

目前它看起来像这样:

InvokeRepeating ("SendChangedValues", SEND_RATE, SEND_RATE);
Run Code Online (Sandbox Code Playgroud)

虽然有类似的东西会很好

InvokeRepeating (SendChangedValues.Name(), SEND_RATE, SEND_RATE); //or
InvokeRepeating (functions.GetName(SendChangedValues), SEND_RATE, SEND_RATE);
Run Code Online (Sandbox Code Playgroud)

这可能在c#中吗?或者其他确保我在更改函数名称而不更改这些字符串时收到错误/警告的内容.

编辑1:我能想到的最干净的事情是使用函数的名称创建一个const字符串,并将它放在函数本身之前.因此,更难忘记更改字符串,因为它就在它上面,而且我也只需要更改一个const字符串来更改所有协同程序.

谢谢!

Raj*_*dar 10

啊......如果它是下一个C#版本,你可以使用nameof运算符.

现在,这有助于你的事业吗?

private static string GetFunctionName(Action method)
{
 return method.Method.Name;
}
Run Code Online (Sandbox Code Playgroud)

叫做使用:

string methodName = GetFunctionName(SendChangedValues);
Run Code Online (Sandbox Code Playgroud)

您可能想要探索不同的委托类型..动作,Func等.

上面唯一的问题是,对于每个方法签名,您可能需要定义正确的签名/重载来获取名称.