2013-05-30 22 views
1

不確定這是否可能,但有沒有辦法實現這一點?C# - >將類的所有屬性轉儲到字典

給出這個類:

class A 
{ 
    public String B {get;set;} 
    public String C {get;set;} 
    public String D {get;set;} 
} 

實例化並分配V1,V2,V3,以B,C,d分別

我希望一個字典\矩陣\含有一些其它結構

B:V1 
C:V2 
D:V3 

最好不使用第三方庫

+0

通過屬性,你的意思是領域或屬性,或兩者?因爲屬性也可能意味着別的東西。此外,您嘗試使用此解決方案解決什麼問題?聽起來有點[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)給我... –

+0

我很困惑..B/C/D是字符串屬性,爲什麼你不直接設置它們? V1應該是什麼類型的數據類型? – James

+0

這可以通過反射來完成,但是也許你真正想要的單詞是'序列化'http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.datacontractserializer.aspx – Seph

回答

1

字段和它的值(公田)簡單的例子:

var a = new A("a", "b", "c"); 
    var fields = typeof(A).GetFields(); 
    var dict = new Dictionary<string, string>(fields.Length); 
    foreach (var fieldInfo in fields) 
    { 
     dict.Add(fieldInfo.Name, (string)fieldInfo.GetValue(a)); 
    } 
2
var a = new A{B = "V1", C = "V2", D = "V3"}; 

var dictionary = a.GetType() 
        .GetProperties() 
        .ToDictionary(prop => prop.Name, 
           prop => prop.GetValue(a)); 
+0

由於某些原因,字典沒有得到填充。任何想法爲什麼? ideone說Getvalue沒有一個參數,我的VS並沒有給出任何錯誤,但字典只是空的http://ideone.com/umLgvr – Akash

2
var props = typeof(A).GetProperties(); 
Dictionary<string, string> output=new Dictionary<string,string>(); 

foreach(PropertyInfo pi in props) 
{ 
    var name = pi.Name, 
    string value= pi.GetValue(this, null) as string; 
    output[name]=value; 
} 
+0

這將不會編譯,'GetValue'返回'object'而不是'string' 。你可能想使用'ToString' –

+0

查看更新回答 – David

+0

爲什麼要使用'as string'?您可能想要在字典中轉儲整數,日期時間和小數。在你的情況下,這個值將是'null' –

0

注意這僅僅是一個樣品,你應該增加更多的防禦性代碼來檢查類型的字段是否正確等...

一個簡單的方法使用反射:

var a = new A(); 
. 
. fill in a.B... etc 
. 
. 
Dictionary<String, String> dict = 
       a.GetType() 
       .GetFields() 
       .ToDictionary(k => k.Name, v => v.GetValue(a).ToString()) 

GetFields()返回一個FieldInfo []數組所以可以CHE CK其他的東西首先像字段被定義等

+0

'v.GetValue(null)'這隻會拋出'TargetException'。'GetValue'的參數是對象,你想從中得到 –

+0

這個字段謝謝,但是隨時糾正你的答案 –

+0

對不起,有時候你通過改變答案的語義直接修改他們的答案而生氣了。 –

相關問題