递归获取变量名称

时间:2016-11-14 09:50:39

标签: c# asp.net .net variables

我尝试递归地获取变量的名称,例如变量test.child,如果我按照this topic,我只得到child而我不知道如何获取所有的父母。

这是我的测试代码:

public static class MemberInfoGetting
{
    public static string GetMemberName<T>(Expression<Func<T>> memberExpression)
    {
        MemberExpression expressionBody = (MemberExpression)memberExpression.Body;
        return expressionBody.Member.Name;
    }
}

public class Test
{
    public string child = "childValue";
}

static void Main(string[] args)
{
    //string testVariable = "value";
    Test test = new Test();
    test.child = "newValue";
    string nameOfTestVariable = MemberInfoGetting.GetMemberName(() => test.child);

    Console.WriteLine(nameOfTestVariable + " | " + test.child);
    Console.Read();
}

2 个答案:

答案 0 :(得分:1)

我把它作为第一个意图投入:(不是100%完成,仍在考虑它,至少它处理你的样本)

public static class MemberInfoGetting {
    public static string GetMemberName<T>(Expression<Func<T>> memberExpression) {
        MemberExpression expressionBody = (MemberExpression)memberExpression.Body;

        var str = expressionBody.ToString();
        var lst =  str.Split('.').Skip(2).ToList(); //This needs LINQ, otherwise do it manually

        StringBuilder retVal = new StringBuilder();

        for (int i = 0; i < lst.Count; i++) {
            retVal.Append(lst[i]);
            if(i != lst.Count -1) {
                retVal.Append(".");
            }
        }               

        return retVal.ToString();
    }
}

答案 1 :(得分:0)

然后可能有这样的东西:

public class Test
{
    public string value = "Value";

    public Test child;

    public Test(Test childObject)
    {
        this.child = childObject;
    }
}

然后可以使用此对象进行递归。现在你有了嵌套对象。 像这样:

Test child = new Test(null);
Test parent = new Test(child);

因此,如果您创建一个方法,在这种情况下将parent对象作为参数,您也可以获得parentchild值。在这种情况下,递归方法的退出条件是具有空Test的{​​{1}}对象。