簡體   English   中英

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

[英]Trying to understand ?. (null-conditional) operator in C#

我有這個非常簡單的例子:

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 ),運算符返回一個int? - 一個可以為空的int
>運算符是為可空整數定義的,因此如果int? 沒有值(為空),比較將返回false

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

您可以將該語句更改為:

if (a?.B ?? false)

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

或者(正如 TheLethalCoder 建議的那樣):

if (a?.B == true)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM