关于C#中的“?”
1. 可空類型修飾符(T?)
強(qiáng)類型語(yǔ)言中引用類型可以為空,如:
string str=null;而你若是定義一個(gè)值類型為空,則是會(huì)報(bào)錯(cuò)的。
然而,在處理數(shù)據(jù)庫(kù)和其他包含可能未賦值的元素的數(shù)據(jù)類型時(shí),我們希望可以將 null 賦值給數(shù)值類型或布爾型的功能特別有用。例如,數(shù)據(jù)庫(kù)中的布爾型字段可以存儲(chǔ)值 true 或 false,或者,該字段也可以未定義
所以C# 提供了一個(gè)特殊的數(shù)據(jù)類型,Nullable 類型(可空類型),可空類型可以表示其基礎(chǔ)值類型正常范圍內(nèi)的值,和 null 值。
例如,Nullable< Int32 >,讀作"可空的 Int32",可以被賦值為 -2^31 到2^31-1 之間的任意值,也可以被賦值為 null 值。
類似的,Nullable< bool > 變量可以被賦值為 true 或 false 或 null。
實(shí)際上,Nullable類型是一個(gè)結(jié)構(gòu)體,它有兩個(gè)公開(kāi)可讀字段:HasValue和Value。 HasValue是一個(gè)布爾值,當(dāng)有值存儲(chǔ)時(shí)它為真,當(dāng)變量值為null時(shí)HasValue為假。當(dāng)HavValue為真是時(shí),可以取得變量的值;為假時(shí),當(dāng)嘗試取得變量的值時(shí)會(huì)拋出一個(gè)異常(System.InvalidOperationException)。
聲明一個(gè) nullable 類型(可空類型)的語(yǔ)法如下:
用可空類型修飾符"?"來(lái)表示,
表現(xiàn)形式為"T?"
例如:int? 表示可空的整形,DateTime? 表示可為空的時(shí)間。
T? 其實(shí)是System.Nullable(泛型結(jié)構(gòu))的縮寫形式,也就意味著當(dāng)你用到T?時(shí)編譯器編譯 時(shí)會(huì)把T?編譯成System.Nullable的形式。
例如:int?,編譯后便是System.Nullable的形式。
2. 三元(運(yùn)算符)表達(dá)式(?: )
例如:x?y:z 表示如果表達(dá)式x為true,則返回y;如果x為false,則返回z,是省略if{}else{}的簡(jiǎn)單形式。
3. 空合并運(yùn)算符(??)
為了減少可空類型的代碼量,遇到null的時(shí)候,C#提供了??操作符來(lái)獲取如果為空的默認(rèn)值
如果此運(yùn)算符的左操作數(shù)不為null,則此運(yùn)算符將返回左操作數(shù),否則返回右操作數(shù)。
例如:a??b 當(dāng)a為null時(shí)則返回b,a不為null時(shí)則返回a本身。
空合并運(yùn)算符為右結(jié)合運(yùn)算符,即操作時(shí)從右向左進(jìn)行組合的。如,“a??b??c”的形式按“a??(b??c)”計(jì)算。
4. NULL檢查運(yùn)算符(?.)
?.用于判斷某個(gè)對(duì)象是否為空,如果對(duì)象為NULL,則不進(jìn)行后面的獲取成員的運(yùn)算,直接返回NULL
例如:
class Foo { public int N { get; } = 1; }static void Main(string[] args) {Foo foo = null;var n = 2 + foo?.N ?? 1Console.WriteLine(n);Console.ReadKey();//input :1 }說(shuō)明:
總結(jié)
- 上一篇: 修改oracle默认日期,Oracle
- 下一篇: 【转】C#执行rar,zip文件压缩的几