gpt4 book ai didi

c# - 从名称中获取对象

转载 作者:太空宇宙 更新时间:2023-11-03 15:36:58 24 4
gpt4 key购买 nike

我有一个对象:

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”的字段和属性的访问。不适用于动态对象。

关于c# - 从名称中获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31561913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com