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

使用空条件布尔?if语句中[副本]

  •  12
  • Centro  · 技术社区  · 7 年前

    此代码的工作原理:

    if (list?.Any() == true)
    

    if (list?.Any())
    

    错误CS0266无法隐式转换类型“bool?”到“bool”

    那么,为什么它不是一种语言特征,在 如果

    1 回复  |  直到 4 年前
        1
  •  7
  •   Derrick Moeller    7 年前

    if Boolean

    bool someBoolean = true;
    
    if (someBoolean)
    {
        // Do stuff.
    }
    

    因为 如果 布尔型 表达式,您试图做的是从 Nullable<bool> . bool

    bool someBoolean;
    IEnumerable<int> someList = null;
    
    // Cannot implicity convert type 'bool?' to 'bool'.
    someBoolean = someList?.Any();
    

    Nullable<T> 确实提供了 GetValueOrDefault 可用于避免真实或错误比较的方法。但我认为您的原始代码更干净。

    if ((list?.Any()).GetValueOrDefault())
    

    public static bool AnyOrDefault<T>(this IEnumerable<T> source, bool defaultValue)
    {
        if (source == null)
            return defaultValue;
    
        return source.Any();
    }
    

    if (list.AnyOrDefault(false))