[英]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
{
}
}
兩個問題
(account.id == PageID)
錯誤(PageID是字符串屬性)
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
是什么類型。 但是,如果id
是int
類型,這將解釋一個錯誤。
如果帳戶集合可以在另一個線程上修改(插入,刪除),則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.