我正在尝试检索属性的变量名称,而不是值。我目前正在使用反射,但如果有人有其他建议,将不胜感激。
我有三节课
一个:
class A
{
public B bObject;
int Number { return bObject.number; } //returns 3
}
乙:
class B
{
public int number = 3;
}
三:
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。谢谢你的时间。
您在这里要做的是检索 Number 方法的主体,然后删除"return"和";"以仅获取所需的值。
这里有一个非常好的例子,展示了如何将方法的主体作为字符串获取: 从.cs文件中获取特定方法源代码(在运行时(
完成后,您只需解析出"return"和";"即可获得所需的内容。
这不是非常优雅,但它可以做你想做的事。
您可以定义自定义属性并在其中存储"bObject.number"等字符串。然后,还可以通过 反射 访问属性值。https://learn.microsoft.com/ru-ru/dotnet/csharp/programming-guide/concepts/attributes/creating-custom-attributes
如果您认为编写两次相同的代码太昂贵,请查看 T4 模板 https://msdn.microsoft.com/ru-ru/library/bb126445.aspx