簡體   English   中英

“?”是什么意思在 C# 中的變量之后?

[英]What does mean “?” after variable in C#?

這個條件是什么意思?

if (!helper?.Settings.HasConfig ?? false)

聚苯乙烯

  • helper是某個class變量
  • Settings是一些字段
  • HasConfig也是字段

嗯, ?. 空條件運算符

https://msdn.microsoft.com/en-us/library/dn986595.aspx

x?.y

表示如果xnull則返回null ,否則返回xy

?? 是一個空合並運算符

https://msdn.microsoft.com/en-us/library/ms173224.aspx

x ?? y

表示如果x == null返回y ,否則x

結合以上所有

helper?.Settings.HasConfig ?? false

意思是:如果返回false

helper == null or
helper.Settings.HasConfig == null

否則返回

helper.Settings.HasConfig

沒有的代碼?? ?. if可以改寫成繁瑣的

if (!(helper == null 
        ? false
        : (helper.Settings.HasConfig == null 
             ? false
             : helper.Settings.HasConfig))) 

檢查C# 運算符列表

x?.y – 空條件成員訪問。 如果左側操作數為 null,則返回 null。

x ?? y – 如果 x 不為空,則返回 x; 否則,返回 y。

所以helper?.Settings將返回 null 如果helper為 null 否則它將返回helper.Settings

如果helper.Settings不為 null 並且helper.Settings.HasConfig不為 null 那么它將返回helper.Settings.HasConfig的值,否則將返回 false。

注意:如果helper?.Settings為 null,則將發生 NULL 引用異常。

?. 運算符被稱為 C# 6 中引入的safe navigation operator 。 Null 條件運算符語法

空條件運算符 (?.) 通俗地稱為"Elvis operator"因為它類似於一頭濃密頭發下的一雙黑眼睛。 null 條件是成員訪問運算符(.)的一種形式。 下面是對空條件運算符的簡化解釋:

如果左操作數 (A) 不為空,則表達式A?.B計算結果為B 否則,它的計算結果為空。

更多細節完全定義了行為:

  • 在 B 是引用類型的情況下,表達式 A?.B 的類型是 B 的類型。 如果 B 是值類型,則表達式 A?.B 是包裝由 B 表示的基礎值類型的可空類型。

  • 特性的規范要求評估 A 沒有
    不止一次。

  • 空條件運算符短路,這意味着您
    可以鏈接多個 ?.operators,知道第一個 null
    遇到阻止剩余的(最右邊的)組件
    表達式從被評估。

示例:- 假設我們有一個 Student 類

public class Student
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

假設 s 代表一個學生。 考慮以下兩個陳述:

var name = s?.FirstName;
var age = s?.Age;

變量名是一個字符串。 name 的值取決於s的值。 如果s為空,則名稱為空。 如果s不為 null,則 name 是s.FirstName的值。 請注意,即使s不是, s.FirstName也可能為 null。

變量年齡是一個int? (這是指定 Nullable 的另一種方式)。 與 name 一樣,age 的值取決於s的值。 如果 s 是null ,age 是int? 沒有價值。 如果 s 非空,則 age 是s.Age的包裝值。

這就是基礎知識。 此功能的強大之處在於此功能可實現更清晰代碼的所有場景。

它將在訪問“設置”屬性之前檢查“幫助程序”是否不為 NULL,以避免 NullReferenceException。 https://msdn.microsoft.com/en-us/library/dn986595.aspx “舊”方式是這樣的:if (helper != null && !helper.Settings ......)。

暫無
暫無

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

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