c#-将动态转换为Lambda表达式

c#-将动态转换为Lambda表达式,c#,asp.net,dynamic,lambda,C#,Asp.net,Dynamic,Lambda,编码平台: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

编码平台: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是一个字符串属性) 更新:这是一个愚蠢的无关错误,因为我调用了所有这些方法
  • 是否有一种更简单、更像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\u令牌


    谢谢您的时间。

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

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

    至于为什么会出现“错误”:我们不能这么说,因为我们不知道id是什么类型的。但是如果
    id
    的类型是
    int
    ,这将解释一个错误。

    如果可以在另一个线程上修改accounts集合(插入、删除),foreach将在发生这种情况时抛出一个异常(simple for loop不会发生)。

    如果将==与字符串一起使用,即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
    

    account.id==PageID
    导致了什么错误?1。尝试PageID.toString()2。对于每一个似乎都很好的对象,没有直接的方法将其写短返回“fb.Get”的对象类型@Matthias:
    PageID
    已经是一个
    string
    ,但是.id似乎是一个整数,不是吗?很抱歉响应延迟。他在别的地方很忙。丹尼尔,你的解决办法行不通。我们讨论的是动态类型