2017-01-31 99 views
2

有一個包含值的字典。它需要將每個值分配給動態實例屬性。動態變量屬性的名稱應該與字典的鍵相同。 事情是這樣的:將詞典中的值分配給動態對象C#

dynamic response = new ExpandoObject(); 
var dict = new Dictionary<string, string>(); 
string s; 
dict.TryGetValue("Name", out s); // imagine dictionary contains some data 
response.Name = s; 
dict.TryGetValue("Street", out s); 
response.Street = s; 
.... 

我相信有一些更有效的方法則只是遍歷每個值。如果要創建for-loop每次如何描述動態實例屬性名稱?謝謝。

回答

2

ExpandoObject實現IDictionary<string, object>因爲這是它如何存儲「屬性」的價值觀,所以你可以這樣做:

var response = new ExpandoObject(); 
var dict = new Dictionary<string, string>(); 
// imagine dict contains some data 
foreach(var kvp in dict) 
{ 
    (response as IDictionary<string, object>)[kvp.Key] = kvp.Value; 
} 

注意,因爲你沒有訪問ExpandoObject的屬性我不使用dynamic這裏動態。它可能不會在隔離方面產生巨大差異,但如果您經常使用此方法,則可能會提高整體性能,因爲索引器將在編譯時綁定,而不是在運行時綁定。

+0

得到了這個異常「不能用[]對'System.Dynamic.ExpandoObject'類型的表達式應用索引'」 – OlegI

+0

@OlegIaremchuk這樣做:(作爲IDictionary 的響應)[kvp.Key] = kvp 。值; –

+0

@MaksimSimkin完美。謝謝 – OlegI