我正在尝试检索属性的变量名称,而不是值。我目前正在使用反射,但是如果有人有其他建议,将不胜感激。
我参加了三堂课
A:
class A
{
public B bObject;
int Number { return bObject.number; } //returns 3
}
B:
class B
{
public int number = 3;
}
C:
class C
{
public void myMethod()
{
A aObject = new A();
var aNumber = aObject
.GetType()
.GetProperty("Number")
.GetValue(aObject, null);
//this is the value. aNumber = 3.
var objName = nameof(aNumber); //returns aNumber
}
我希望 objName返回字符串“ bObject.number” ,该字符串是在属性内部调用的。我当前的设置是否可行?如果没有,是否有人提出建议?
我宁愿B中没有另一个方法返回“ nameof(bObject)+ nameof(bObject.number)”,然后由于冗余而同时调用该方法和prop。谢谢你的时间。
答案 0 :(得分:1)
您要在此处执行的操作是检索Number方法的主体,然后删除“ return”和“;”仅获得所需的值。
这里有一个很好的示例,展示了如何将方法的主体作为字符串获取: Getting a specific method source code from .cs file (at runtime)
完成后,您可以解析出“ return”和“;”得到你想要的。
这不是很优雅,但是可以满足您的要求。
答案 1 :(得分:0)
您可以定义自定义属性,并在其中存储“ bObject.number”之类的字符串。然后,也可以通过反射访问属性值。 https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/concepts/attributes/creating-custom-attributes
如果您认为两次编写相同的代码过于昂贵,请查看T4模板https://msdn.microsoft.com/ru-ru/library/bb126445.aspx