2011-03-15 57 views
6

通常情況下,我們可以這樣創建屬性,是否可以使用ExpandoObject創建運行時屬性?

dynamic expando = new ExpandoObject(); 
expando.Price = 45k; 
expando.Value = "Good"; 

就我而言,我不知道屬性,如「價格」或「價值」,直到運行時。如何,我可以創建這樣的動態屬性。喜歡的東西,

dynamic expando = new ExpandoObject(); 
expando[properties[0]] = 45k; 
expando[properties[1]] = "Good"; 
expando[properties[2]] = "Red"; 
expando[properties[3]] = 8; 

反正來實現這種行爲。

+0

的[添加未知(在設計時)特性的ExpandoObject]可能重複(http://stackoverflow.com/questions/2974008/adding-unknown-at-design-time-properties-to-an-expandoobject) – stijn 2013-06-11 17:08:44

回答

20

只需使用一個事實,即它實現IDictionary<string, Object>

IDictionary<string, Object> expando = new ExpandoObject(); 
expando[properties[0]] = 45; 
expando[properties[1]] = "Good"; 
expando[properties[2]] = "Red"; 
expando[properties[3]] = 8; 

dynamic d = expando; 
// Now use the properties as normal 

在另一方面,如果你不知道的屬性,直到執行時間,什麼實際要消耗呢?它可能仍然有意義使用ExpandoObject - 但它同樣它可能是有意義的使用Dictionary<string, object>開始。

+0

感謝您的建議。 我有AdomdDataReader對象。因爲沒有Grid控件支持將AdomdData對象綁定爲ItemsSource,所以我想從ADR中生成一個更輕的可枚舉源。爲此,我正在研究動態,因爲大多數網格控件都支持動態綁定。再次感謝。 – 2011-03-15 11:22:04

+0

+1,特別是指出在這種情況下使用ExpandoObject可能很愚蠢。目前重構我的代碼來使用普通的字典。 :) – 2013-11-28 08:22:39

相關問題