2014-09-24 50 views
1

我有一個包含動態列表的類,我可以像這樣訪問它。如何通過列表循環<dynamic>

foreach (var c in objects) 
{ 
    foreach (dynamic i in c.data) 
    { 
     var ss = i; 
    } 
} 

的Class

public class iUpdateGrid 
{ 
    public int type { get; set; } 
    public string session { get; set; } 
    public string latitude { get; set; } 
    public string longitude { get; set; } 
    public string ip { get; set; } 
    public int id { get; set; } 
    public string station { get; set; } 
    public List<iGridData> h_33 { get; set; } 
} 
public class iGridData 
{ 
    public string table { get; set; } 
    public List<dynamic> data { get; set; } 
} 

「SS」現在包含對象的列表,但是不知道如何獲取這些值的字典或列表。 一個筆記我還需要調整鍵名稱。

事情我試圖做的:

foreach (KeyValuePair<string, string> kv in i) 
{ 
    string key = kv.Key; 
    string value = kv.Value; 
} 

foreach語句無法在類型「System.Collections.IEnumerable」的變量操作,因爲「System.Collections.IEnumerable」不包含「的GetEnumerator」一個公共定義

此外,動態對象不會提供訪問密鑰和/或值的選項。

任何幫助我如何循環通過這將是非常受歡迎的。

此外,當我把它放在運行時「我」說它的一個System.Collections.Generic.Dictionary然而也可以訪問這也。

解決方案:

取得什麼機會,解決方案提供,但爲我工作:

 foreach (var c in objects) 
     { 
      foreach (dynamic i in c.data) 
      { 
       foreach (var v in (i as IDictionary<string, object>)) 
       { 
        string key = v.Key; 
        object value = v.Value; 
       } 
      } 
     } 
+1

的問題是「如何我轉換c.data到詞典「, 對?如果是這樣,'c.data'的_type_是什麼? – 2014-09-24 09:58:56

+0

此外,錯誤「'System.Collections.IEnumerable'不包含'GetEnumerator'的公共定義」是沒有意義的。它確實包含一個'GetEnumerator'。 – 2014-09-24 10:02:51

+0

c.data是一個動態列表 user3763117 2014-09-24 16:07:24

回答

0
foreach (var v in (i as IEnumerable<object>)) 
    { 
     if (v is KeyValuePair<string, string>) 
     { 
      // Do stuff 
     } 
     else if (v is List<string>) 
     { 
      //Do stuff 
     } 

     else throw new InvalidOperationException(); 
    } 
+0

我得到錯誤「對象引用未設置爲對象的實例。「on(i as IEnumerable ) – user3763117 2014-09-24 16:09:11

+0

感謝@Kowalski的正確路線圖) – user3763117 2014-09-24 17:51:39

0
foreach (var c in objects) 
{ 
    foreach (dynamic i in c.data) 
    { 
     var property_value = i.GetType().GetProperty("PROPERTY_NAME").GetValue(i); 
    } 
} 
+1

雖然此代碼可能回答此問題,但提供有關如何和/或爲何解決問題的其他上下文會提高答案的長期價值。 – 2017-02-08 11:38:21

+1

請**描述**你的答案,而不是隻使用**代碼**,否則你的答案將被刪除! – 2017-02-08 19:41:17