2011-03-23 111 views
1

我正在使用Facebook C#SDK獲取數據。我想用parallel.foreach但不能使用它 - 相反,出現錯誤:將動態類型轉換爲列表

如果不首先它強制轉換爲委託或表達式樹類型

使用lambda表達式作爲參數傳遞給動態調度操作

那麼有什麼辦法可以將檢索到的數據轉換爲列表?

dynamic friends = app.Get("me/friends"); 
Parallel.ForEach(friends.data, friendsData => 
    { 
     Interlocked.Increment(ref infoCount); 
     LoadFriends(friend, infoCount); 
    }); 
+0

什麼樣的數據是回來的朋友嗎?它是XML,一種數據結構,是什麼?而使用var而不是動態解決你的問題? – taylonr 2011-03-23 18:40:32

回答

3

如果你不能使用lambda表達式,你嘗試過一個匿名方法?

dynamic friends = app.Get("me/friends"); 
    Parallel.ForEach(friends.data, delegate(dynamic friendsData) 
     { 
      Interlocked.Increment(ref infoCount); 
      LoadFriends(friend, infoCount); 

     }); 
+0

即使與此相同的錯誤 – 2011-03-23 19:10:13

+1

嘗試在調用Parallel.ForEach之前將friends.data轉換爲IEnumerable – Tejs 2011-03-23 19:12:18

1

我用下面的代碼到JsonArray轉換爲ID的字典作爲鍵和名稱作爲值

var friendlist = (friends.data as Facebook.JsonArray).ToDictionary( 
       p => (p as Facebook.JsonObject)["id"].ToString(), 
       p => (p as Facebook.JsonObject)["name"].ToString()); 

Parallel.ForEach(friendlist, friend 
     { 
      Interlocked.Increment(ref infoCount); 
      LoadFriends(friend, infoCount); 
     }