運算子c - c#和




試圖了解? C#中的(空條件)運算符 (2)

在第一種情況( list?.Count )中,運算符返回 int? -可為null的 int
> 操作符是為可為空的整數定義的,因此如果 int? 沒有值(為null),比較將返回 false

在您的第二個示例( a?.B )中,是 bool? 返回(因為如果 a 為null,則既不是 true 也不是 false 而是返回 null )。 bool? 不能在 if 語句中使用,因為 if 語句需要一個(不可為null的) bool

您可以將該語句更改為:

if (a?.B ?? false)

使它再次工作。 因此,當空條件運算符( ?. )返回 null 時,空合併運算符( ?? )返回 false

或(如TheLethalCoder建議):

if (a?.B == true)

我有一個非常簡單的示例:

class Program
{
    class A
    {
        public bool B;
    }

    static void Main()
    {
        System.Collections.ArrayList list = null;

        if (list?.Count > 0)
        {
            System.Console.WriteLine("Contains elements");
        }

        A a = null;

        if (a?.B)
        {
            System.Console.WriteLine("Is initialized");
        }
    }
}

if (list?.Count > 0) 完美編譯,這意味著如果 listnull ,則默認情況下, Count > 0 表達式為 false

但是, if (a?.B) 拋出編譯器錯誤,說我不能隱式轉換 bool? bool

為什麼一個與另一個不同?


  • list?.Count > 0 :這裡您比較一個 int?int ,產生 bool ,因為 提升的比較運算符返回 bool ,而不是 bool?
  • a?.Ba?.B :這是個 bool? 。 但是, if 需要 bool






null-conditional-operator