2011-12-30 99 views
0

的最佳方式转换一下这个词典:词典<字符串,对象>反对

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;} 
} 

+0

退房这个环节,它可以帮助回答你的问题的http://blog.andreloker .de/post/2008/05/03/Anonymous-type-to-dictionary-using-DynamicMethod.aspx – MethodMan 2011-12-30 07:59:44

+0

我想从Select数据库查询中返回对象。 – 2011-12-30 08:02:49

+1

我认为Dictionary类有一个误解。您似乎会将字典的两个不同元素与一个语义对象相对应。你需要的东西似乎是一个Dictionary对象,它有一个映射到Person对象的int对象。 – 2011-12-30 08:02:53

回答

2

如果您希望能够对任何对象进行一般操作,则可以使用反射。假设在字典中的值是合适的类型,无需转换:

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); 
0
Person myPerson = new Person(); 
myPerson.ID = (int)person["ID"]; 
myPerson.Name = (string)person["Name"]; 

不提供与int cast的错误检查。

4

这里是我的建议:

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

这种说法没有错误处理,并假设该领域存在于词典和充满有效值!

0

最简单的办法:

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

一般的方式是:使用了反射。

相关问题