using System;
public class A
{
public B MyProperty { get;set; }
}
public class B
{
public string Text { get;set; }
}
static class PropertyEval
{
public static string GetValueFromProperty(this object obj, string Name)
{
var methods = Name.Split(new [] {"."}, StringSplitOptions.RemoveEmptyEntries);
object current = obj;
object result = null;
foreach(var method in methods)
{
var prop = current.GetType().GetProperty(method);
result = prop != null ? prop.GetValue(current, null) : null;
current = result;
}
return result.ToString();
}
}
public class Test
{
public static void Main()
{
A a = new A();
a.MyProperty = new B() { Text = "Success" };
Console.WriteLine(PropertyEval.GetValueFromProperty(a, "MyProperty.Text"));
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIEEKewogICBwdWJsaWMgQiBNeVByb3BlcnR5IHsgZ2V0O3NldDsgfQkKfQoKcHVibGljIGNsYXNzIEIKewoJcHVibGljIHN0cmluZyBUZXh0IHsgZ2V0O3NldDsgfQp9CgpzdGF0aWMgY2xhc3MgUHJvcGVydHlFdmFsCnsKCXB1YmxpYyBzdGF0aWMgc3RyaW5nIEdldFZhbHVlRnJvbVByb3BlcnR5KHRoaXMgb2JqZWN0IG9iaiwgc3RyaW5nIE5hbWUpCiAgICB7CiAgICAgIHZhciBtZXRob2RzID0gTmFtZS5TcGxpdChuZXcgW10geyIuIn0sIFN0cmluZ1NwbGl0T3B0aW9ucy5SZW1vdmVFbXB0eUVudHJpZXMpOwogICAgICAKICAgICAgb2JqZWN0IGN1cnJlbnQgPSBvYmo7CiAgICAgIG9iamVjdCByZXN1bHQgPSBudWxsOwogICAgICBmb3JlYWNoKHZhciBtZXRob2QgaW4gbWV0aG9kcykKICAgICAgewogICAgICAJdmFyIHByb3AgPSBjdXJyZW50LkdldFR5cGUoKS5HZXRQcm9wZXJ0eShtZXRob2QpOwogICAgICAgIHJlc3VsdCA9IHByb3AgIT0gbnVsbCA/IHByb3AuR2V0VmFsdWUoY3VycmVudCwgbnVsbCkgOiBudWxsOwogICAgICAgIGN1cnJlbnQgPSByZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdC5Ub1N0cmluZygpOwogICAgfQp9CgpwdWJsaWMgY2xhc3MgVGVzdAp7CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlBIGEgPSBuZXcgQSgpOwoJCWEuTXlQcm9wZXJ0eSA9IG5ldyBCKCkgeyBUZXh0ID0gIlN1Y2Nlc3MiIH07CgkJCgkJQ29uc29sZS5Xcml0ZUxpbmUoUHJvcGVydHlFdmFsLkdldFZhbHVlRnJvbVByb3BlcnR5KGEsICJNeVByb3BlcnR5LlRleHQiKSk7Cgl9Cn0=