如何从已知方法获取methodname?

时间:2013-08-04 05:50:15

标签: c# invoke method-names

是否可以使用手动编写的字符串获取同一类中另一个方法的名称,但没有

class MyClass {

    private void doThis()
    {
        // Wanted something like this
        print(otherMethod.name.ToString());
    }   

    private void otherMethod()
    {

    }
}

你可能会问为什么:原因是我必须稍后调用这个方法,比如这个Invoke(“otherMethod”),但是我不想自己硬编码这个字符串,因为我无法在其中重构它项目

4 个答案:

答案 0 :(得分:8)

一种方法是将其包装到委托Action中,然后您可以访问方法的名称:

string name = new Action(otherMethod).Method.Name;

答案 1 :(得分:2)

您可以使用反射(示例 - http://www.csharp-examples.net/get-method-names/)来获取方法名称。然后,您可以按名称,参数查找要查找的方法,甚至可以使用属性对其进行标记。

但真正的问题是 - 你确定这是你需要的吗?这看起来好像你不需要反思,但需要考虑你的设计。如果您已经知道要调用的方法,为什么需要这个名字?使用代表怎么样?或者通过接口公开方法并存储对实现它的某个类的引用?

答案 2 :(得分:1)

试试这个:

MethodInfo method = this.GetType().GetMethod("otherMethod");
object result = method.Invoke(this, new object[] { });

答案 3 :(得分:0)

顺便说一下。我还发现(在互联网的扩展中)另一种解决方案,只获取方法的字符串。它也适用于参数和返回类型:

System.Func<float, string> sysFunc = this.MyFunction;
string s = sysFunc.Method.Name; // prints "MyFunction"

public string MyFunction(float number)
{
    return "hello world";
}