我有一个对象:
MyObject obj = new MyObject();
obj.X = "Hello";
obj.Y = "World";
某人传递给我一个字符串:
string myString = "obj.X";
我想获得引用到myString的值,像这样:
var result = <Some Magic Expression>(myString); // "Hello"
有可能通过反射吗?
您不能完全复制这种行为,因为局部变量的名称不会保存在方法的元数据中。但是,如果您保留一个对象字典,则可以通过其键来寻址对象:
public static object GetProperty(IDictionary<string, object> dict, string path)
{
string[] split = path.Split('.');
object obj = dict[split[0]];
var type = obj.GetType();
return type.InvokeMember(split[1], BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetField | BindingFlags.GetProperty, null, obj, null);
}
var dict = new Dictionary<string, object>();
var cl = new MyClass();
dict["obj"] = cl;
cl.X = "1";
cl.Y = "2";
Console.WriteLine(GetProperty(dict, "obj.X"));
Console.WriteLine(GetProperty(dict, "obj.Y"));
这可以处理访问格式为"name.property"的字段和属性。