[英]Get Object from its name
我有一個對象:
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"));
這可以處理“名稱。屬性”格式的訪問字段和屬性。 對動態對象無效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.