[英]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
表示如果x
為null
則返回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.