C# · 12月 30, 2021

在c#中获取函数的名称

在Unity中使用协同程序或InvokeRepeating时,必须使用要调用的函数的名称给出一个字符串.虽然如果您更改该函数的名称,这是一个痛苦,因为您必须记住更改使用它的协同程序.有没有更清洁的方法来做到这一点?

目前看起来像这样:

InvokeRepeating (“SendChangedValues”,SEND_RATE,SEND_RATE);

虽然这样做会很好

InvokeRepeating (SendChangedValues.Name(),SEND_RATE); //orInvokeRepeating (functions.GetName(SendChangedValues),SEND_RATE);

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

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

谢谢!

解决方法 嗯..如果是下一个C#版本,你可以使用nameof运算符.

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

private static string GetFunctionName(Action method){ return method.Method.Name;}

称为使用:

string methodName = GetFunctionName(SendChangedValues);

你可能想要探索不同的委托类型.. Action,Func等

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