5

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

我涉及三个课程

A:

class A 
{
    public B bObject;

    int Number { return bObject.number; } //returns 3
}

乙:

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)”,然后由于冗余而调用该方法和道具。谢谢你的时间。

4

2 回答 2

1

您在这里尝试做的是检索 Number 方法的主体,然后删除“return”和“;” 只获得你想要的价值。

这里有一个很好的例子,展示了如何将方法体作为字符串获取: Getting a specific method source code from .cs file (at runtime)

完成后,您可以解析出“return”和“;” 得到你想要的。

这不是非常优雅,但它可以满足您的需求。

于 2018-08-27T20:58:00.750 回答
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

于 2018-08-27T21:49:04.150 回答