2011-12-30 41 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"] 
} 

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

相關問題