C# 如何从实例变量中获取字段名

C# 如何从实例变量中获取字段名,c#,reflection,C#,Reflection,请告诉我如何从实例变量中获取字段名 public class MainClass { public void output() { Action valAction = new TestClass().testAction; //I want to output string 'testAction' from valAction variable here Debug.WriteLine(valAction.????);

请告诉我如何从实例变量中获取字段名

public class MainClass
{
    public void output()
    {
        Action valAction = new TestClass().testAction;

        //I want to output string 'testAction' from valAction variable here
        Debug.WriteLine(valAction.????);
    }
}

public class TestClass
{
    public Action testAction = () => { };
}
替换

Debug.WriteLine(valAction.????);

听起来你有一个好朋友

事实是,你不可能真正做到你想要的。一旦将字段
testAction
所包含的值复制到另一个变量(局部变量
valAction
)中,原始字段就不再涉及

考虑一个更简单的例子:

class A
{
    int i = 17;

    void M()
    {
        int j = i;
    }
}
您是否希望能够以某种方式从变量
j
中收集“i”?我希望不是。变量
j
包含一个32位整数值。它不在乎价值来自何方,也不应该如此

类似地,
valAction
也不包含任何关于它接收到的值来自何处的信息。它只持有价值本身


如果你能解释你在这里试图解决的更广泛的问题,你可能会得到一个解决方案。但是你在这里问的问题没有答案。你实际上是在要求不可能的事情。

上面的
a
是什么?无论如何,这是如何解决所提出的问题的?如果必须指定字符串literal
“testAction”
,那么这比只调用
Debug.WriteLine(“testAction”)要好多少?当我用命名函数替换valAction变量时,我希望不使用文字“testAction”,如下所示。{Method={Void namedFunction()}}然而,当我替换Lambda时,我如下所示。我不知道你在这部戏里演的是哪一个兰姆达。{Method={Void b_uu1_0()}因此我想知道成员变量名'testAction'。@kyounoii:“我想知道成员变量名'testAction'”--你不能。我就是这么说的。您将委托实例本身与存储委托实例的变量混淆,从中可以提取方法目标名称。当委托实例被分配给任何其他变量时,它与从中分配它的变量没有任何关系。
class A
{
    int i = 17;

    void M()
    {
        int j = i;
    }
}