Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从已知方法中获取methodname?_C#_Invoke_Method Names - Fatal编程技术网

C# 如何从已知方法中获取methodname?

C# 如何从已知方法中获取methodname?,c#,invoke,method-names,C#,Invoke,Method Names,是否可以获取同一类中另一个方法的名称,但不使用手动编写的字符串 class MyClass { private void doThis() { // Wanted something like this print(otherMethod.name.ToString()); } private void otherMethod() { } } 您可能会问为什么:原因是我以后必须像调用(“otherMet

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

class MyClass {

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

    private void otherMethod()
    {

    }
}

您可能会问为什么:原因是我以后必须像调用(“otherMethod”)一样调用该方法,但是我不想自己硬编码该字符串,因为我无法在项目中重构它。

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

string name = new Action(otherMethod).Method.Name;
您可以使用反射(示例-)来获取方法名称。然后,您可以通过名称、参数甚至使用属性来标记正在查找的方法

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

尝试以下方法:

MethodInfo method = this.GetType().GetMethod("otherMethod");
object result = method.Invoke(this, new object[] { });
顺便说一句,我还发现(在互联网的扩展中)一种仅获取方法字符串的替代解决方案。它还适用于参数和返回类型:

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

public string MyFunction(float number)
{
    return "hello world";
}
System.Func sysFunc=this.MyFunction;
字符串s=sysFunc.Method.Name;//打印“MyFunction”
公共字符串MyFunction(浮点数)
{
返回“你好世界”;
}

您可以使用反射来实现这一点。您使用的是什么版本的C#呢?谢谢您的帮助!该死,我查了GetType()和GetMethods(),但这个“新动作”我从没听说过。小问题:当我使用新操作时,我希望其中的方法不会被执行(它只取名称),对吗?如果使用委托方法,则不需要获取名称(因此跳过通过反射调用)-只需使用结果
操作
稍后执行方法。哇!太棒了,我不知道你能做到。太棒了!再次感谢@Malvin:您也可以使用来实现字段/属性等的类似目标,尽管Cuong的解决方案更适合这里的方法。唯一的区别是,这也适用于非void方法。方法是相同的,您显然需要使用与方法签名匹配的
Action
/
Func
类型。OP中的示例是一个无参数void函数,意思是
操作
。您不能使用
Func
来实现这种方法。您是对的,它基于相同的根。我只是想提醒一下,因为我在C#方面还不是那么专业。