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;
}
}