字典<字符串、对象>到对象

本文关键字:对象 字符串 字典 | 更新日期: 2023-09-27 18:19:08

转换此字典的最佳方法是什么:

Dictionary<string, object> person = new Dictionary<string, object>();
                            person.Add("ID", 1);
                            person.Add("Name", "Alex");

要反对:

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

字典<字符串、对象>到对象

这是我

的建议:

var newPerson = new Person 
    { 
        ID = (int)person["ID"],
        Name = person["Name"].ToString()
    };

这没有错误处理,并且假设字段存在于字典中并填充了有效值!

如果您希望能够对任何对象执行此操作,则可以使用反射。 假设字典中的值是适当的类型并且不需要转换:

static T GetObject<T>(Dictionary<string, object> dict)
    where T : new()
{
    var obj = new T();
    foreach (var property in typeof(T).GetProperties())
    {
        var args = new object[1];
        var setter = property.GetSetMethod(); // property has a public setter
        if (setter != null && dict.TryGetValue(property.Name, out args[0]))
            setter.Invoke(obj, args);
    }
    return obj;
}

然后使用它:

var alexDict = new Dictionary<string, object>
{
    { "ID", 1 },
    { "Name", "Alex" },
};
var alexPerson = GetObject<Person>(alexDict);
Person myPerson = new Person();
myPerson.ID = (int)person["ID"];
myPerson.Name = (string)person["Name"];

不提供对 int 强制转换的错误检查。

简单的方法:

var person = new Person
{
    Id = (int)dict["ID"],
    Name = (string)dict["Name"]
}

通用方法:使用反射。