代码之家  ›  专栏  ›  技术社区  ›  Chenna

运算符“&&”不能应用于bool和bool?

  •  1
  • Chenna  · 技术社区  · 7 年前

    示例查询

    var users = (from t in T_Table
                join x in X_Table on t.id equals x.id
                where t.pid == x.pid
                && somelist.contains(t.id) //UNABLE TO APPLY somelist?.contains
                select (new User(){name = t.user})).ToList();
    

    我不能空查一些名单。

    它显示:

    运算符“&”不能应用于布尔和布尔操作数?

    4 回复  |  直到 7 年前
        1
  •  3
  •   Pranay Rana    7 年前

    问题是如果你这样写

    somelist?.contains(t.id) 如果someList为 null 空值不是布尔值。

    所以你应该这样试试

      &&  (somelist!=null ? somelist.contains(t.id) : false)
    

    检查: 3 misuses of ?. operator in C# 6

        2
  •  2
  •   fubo    7 年前

    你的错误是因为

    bool b1 = true;
    bool? b2 = true;
    bool result = b1 && b2; //b2 could also be null
    

    有两种方法可以解决这个问题。

    1个

    bool result = b1 && b2 == true;  // somelist?.contains() == true
    

    2个

    if(somelist == null)
    {
       somelist = new List<yourType>();
    }
    
        3
  •  0
  •   Dom84    7 年前

    在访问contains之前,首先检查somelist是否为空。

    var users = (from t in T_Table
                join x in X_Table on t.id equals x.id
                where t.pid == x.pid
                && somelist != null && somelist.contains(t.id) //UNABLE TO APPLY somelist?.contains
                select (new User(){name = t.user})).ToList();
    
        4
  •  -1
  •   Sowdhanya    7 年前

    首先检查somelist是否有任何数据,如果somelist为空,则不能对somelist操作contains

    Where(u => somelist.Contains(t.Id.Value)) 
    

    如果someList不为空,也应该有效