是否可以使用反射检索属性的变量名称(而不是值)?



我正在尝试检索属性的变量名称,而不是值。我目前正在使用反射,但如果有人有其他建议,将不胜感激。

我有三节课

一个:

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

相关内容

  • 没有找到相关文章

最新更新