gpt4 book ai didi

c# - 创建类型并在运行时初始化它

转载 作者:行者123 更新时间:2023-11-30 19:20:30 25 4
gpt4 key购买 nike

假设我有这样的 Dictionary:

Dictionary<string, string> values = new Dictionary<string, string>()
{
{ "Name" , "John Smith"},
{ "Age", "34"}
};

现在我想从该字典创建类型并在运行时使用值对其进行初始化,以便我能够通过反射访问它的属性。

对于此示例,我希望对象的属性 Name 等于 "Jon Smith" 并且 Age 等于 34.

编辑:我需要这个来比较两个对象与语义比较库,例如 TestApi .由具有强类型的其他代码创建的第一个对象

class Person 
{
public string Name {get; set;}
public int Age { get; set;}
}

和其他我需要从其他来源创建,如 xml 文件(但不是必需的)。将要比较的类型仅在运行时已知。

最佳答案

如果您使用的是 C# 4,则可以使用 dynamicExpandoObject为此 - 它实际上并不是在创建一个新类型,但在某些情况下它已经足够接近了:

IDictionary<string, object> foo = new ExpandoObject();
foreach (var pair in values)
{
foo[pair.Key] = pair.Value;
}

dynamic d = foo;
string name = d.Name;
string age = d.Age; // This will still be a string, not an int

编辑:我没有注意到您想通过反射访问数据。使用反射是一种像 map 一样有效地处理类型的方法 - 您已经得到它的那种形式。为什么不直接访问字典呢?唯一的好处是,如果您希望能够将某些 类型与反射一起使用,而另一些则与字典一起使用。在那种情况下,我将创建一个具有两个实现的通用接口(interface)——其中一个从字典中获取值,另一个使用反射。这比动态创建类型要容易得多(这是可能的,但不是很有趣)。

关于c# - 创建类型并在运行时初始化它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6035490/

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