C#中單問號(?)和雙問號(??)的用法整理
一、可空類型修飾符(?)
C#2.0里面實現(xiàn)了Nullable數(shù)據(jù)類型
//A.比如下面一句,直接定義int為null是錯誤的,錯誤提示為無法將null轉(zhuǎn)化成int,因為后者是不可以為null的值類型。 private int getNum = null; //B.如果修改為下面的寫法就可以初始指為null,在特定情況下?等同于基礎(chǔ)類型為Nullable。 private int? getNum = null; private Nullable<int> getNumNull = null;
二、三元運算符(?:)
需要if語句來判斷,當(dāng)Request.Params["para"]不為null時,取出para的值。
string strParam =Request.Params["para"]; if ( strParam== null ) { strParam= ""; }
用三元運算符?簡化寫法,取出para的值。
string strParam=Request.Params["para"] == null ? "":Request.Params["para"];
三、null合并運算符(??)
?? 運算符稱為“ null 合并運算符”,用于定義可以為 null 值的類型和引用類型的默認(rèn)值。合并運算符為類型轉(zhuǎn)換定義了一個預(yù)設(shè)值,以防可空類型的值為Null。
如果此運算符的左操作數(shù)不為 null,則此運算符將返回左操作數(shù);否則返回右操作數(shù)。
int? x = null;//定義可空類型變量 int? y = x ?? 1000;//使用合并運算符,當(dāng)變量x為null時,預(yù)設(shè)賦值1000 Console.WriteLine(y.ToString()); //1000
null 合并運算符為右結(jié)合運算符,即操作時從右向左進(jìn)行組合的。如,“a??b??c”的形式按“a??(bb??cc)”計算。
如果在嘗試將可以為 null 值的類型分配給不可以為 null 值的類型時沒有使用 ?? 運算符,則會生成編譯時錯誤。如果使用強制轉(zhuǎn)換,且當(dāng)前還未定義可以為 null 值的類型,則會引發(fā)InvalidOperationException 異常。
//A.定義getNum為null,輸出結(jié)果為0 private int? getNum = null; Console.WriteLine(getNum ?? 0); //B.定義getNum為1,輸出結(jié)果為1 private int getNum = 1; Console.WriteLine(getNum ?? 0);
四、NULL條件運算符(?.)
在C# 6.0中,引入了一個 ?. 的運算符。
如果對象為NULL,則不進(jìn)行后面的獲取成員的運算,直接返回NULL
void Main() { //首先我們定義全局變量Person對象,有可能p為null的情況下取值。 Person p = null; string telePhoneNo = string.Empty; //定義telePhoneNo //取Person的telePhoneNo //A.初始寫法,if條件判斷 if (p != null) { if (p.Secret != null) { telePhoneNo = p.Secret.TelePhoneNo; } } //B.三元運算符寫法,單問號? telePhoneNo = p != null ? (p.Secret != null ? p.Secret.TelePhoneNo : "") : ""; //C. NULL檢查運算符?. telePhoneNo = p?.Secret?.TelePhoneNo ?? ""; Console.Write(telePhoneNo); } public class SecretByMySelf { public string Password { get; set; } public string TelePhoneNo { get; set; } } public class Person { public string Name { get; set; } public SecretByMySelf Secret { get; set; } }
五、?[]"運算符:
用于在執(zhí)行成員訪問 (?.) 或索引 (?[) 操作之前,測試是否存在 NULL。 這些運算符可幫助編寫更少的代碼來處理 null 檢查,尤其是對于下降到數(shù)據(jù)結(jié)構(gòu)。
int? count = customers?[0]?.Orders?.Count(); // null if customers, the first customer, or Orders is null
到此這篇關(guān)于C#中單問號(?)和雙問號(??)的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#使用Windows Service的簡單教程(創(chuàng)建、安裝、卸載、調(diào)試)
這篇文章主要為大家詳細(xì)介紹了C#創(chuàng)建、安裝、卸載、調(diào)試Windows Service(Windows 服務(wù))的簡單教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01C#調(diào)用FFmpeg操作音視頻的實現(xiàn)示例
本文主要介紹了C#調(diào)用FFmpeg操作音視頻的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01Winform ComboBox如何獨立繪制下拉選項的字體顏色
這篇文章主要介紹了Winform ComboBox如何獨立繪制下拉選項的字體顏色,幫助大家更好的理解和使用c# winform,感興趣的朋友可以了解下2020-11-11C#如何使用DateTime.Now.AddDays方法獲取任一天的信息
使用DateTime.Now屬性可以得到當(dāng)前的日期信息,此時調(diào)用ToString方法,并在該方法中添加指定的格式化字符串,可以按照要求輸出當(dāng)前日期的信息,本文介紹C#使用DateTime.Now.AddDays方法獲取任一天的信息,感興趣的朋友一起看看吧2024-01-01