簡體   English   中英

將動態轉換為Lambda表達式

[英]c# - Converting dynamic into Lambda expression

編碼平台:ASP.NET C#4.0

我有以下片段

public string PageID { get { return "20954654402"; } }
dynamic accounts = fb.Get("me/accounts");
if (accounts != null)
{
    bool isFound = false;
    foreach (dynamic account in accounts.data)
    {
        if (account.id == PageID)
        {
            isFound = true;
            break;
        }
    }
    if (!isFound)
    {
        //  user not admin
    }
    else
    {

    }
}

兩個問題

  1. 為什么 (account.id == PageID)錯誤(PageID是字符串屬性) 更新:這是一個愚蠢的無關錯誤,因為我在PageMethods調用所有這些錯誤。
  2. 有沒有更簡單,更多的C#4.0之類的方法來更改foreach循環?

更新:

它來自對Facebook API的調用的響應。 樣品將是

{
    [{
        "name": "Codoons",
        "category": "Computers/technology",
        "id": "20954694402",
        "access_token": "179946368724329|-100002186424305|209546559074402|Hp6Ee-wFX9TEQ6AoEtng0D0my70"
    }, {
        "name": "Codtions Demo Application",
        "category": "Application",
        "id": "1799464329",
        "access_token": "179946368724329|-100002186424305|179946368724329|5KoXNOd7K9Ygdw7AMMEjE28_fAQ"
    }, {
        "name": "Naen's Demo Application",
        "category": "Application",
        "id": "192419846",
        "access_token": "179946368724329|61951d4bd5d346c6cefdd4c0.1-100002186424305|192328104139846|oS-ip8gd_1iEL9YR8khgrndIqQk"
    }]
}

更新的代碼也有點。

目的是獲取與PageID匹配的account.id ,並獲取與該account.id相關聯的access_token

感謝您的時間。

您可以使用LINQ方法替代foreach:

if(accounts.Any(a => a.id == PageID))
{
    //  user not admin
}
else
{

}

關於它為什么“出錯”:我們不能這么說,因為我們不知道id是什么類型。 但是,如果idint類型,這將解釋一個錯誤。

如果帳戶集合可以在另一個線程上修改(插入,刪除),則foreach將在發生這種情況時引發異常(簡單的for循環不會)。

當將==與字符串(即PageID是字符串)一起使用時,account.id也應該是字符串,而不是int或float,也許那是引起錯誤的原因

accounts.data.Any(a => a.id.ToString() == PageID)

您應該使用動態謂詞。 像這樣:


var pagesWithId = (Predicate)((dynamic x) => x.id == PageId);
var pagesFound = accounts.FindAll(pagesWithId);

if(pagesFounds.Count() > 0)
 //do your thing

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM