我尝试递归地获取变量的名称,例如变量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();
}
答案 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
对象作为参数,您也可以获得parent
和child
值。在这种情况下,递归方法的退出条件是具有空Test
的{{1}}对象。