C#中單問(wèn)號(hào)(?)和雙問(wèn)號(hào)(??)的用法整理
一、可空類型修飾符(?)
C#2.0里面實(shí)現(xiàn)了Nullable數(shù)據(jù)類型
//A.比如下面一句,直接定義int為null是錯(cuò)誤的,錯(cuò)誤提示為無(wú)法將null轉(zhuǎn)化成int,因?yàn)楹笳呤遣豢梢詾閚ull的值類型。 private int getNum = null; //B.如果修改為下面的寫法就可以初始指為null,在特定情況下?等同于基礎(chǔ)類型為Nullable。 private int? getNum = null; private Nullable<int> getNumNull = null;
二、三元運(yùn)算符(?:)
需要if語(yǔ)句來(lái)判斷,當(dāng)Request.Params["para"]不為null時(shí),取出para的值。
string strParam =Request.Params["para"];
if ( strParam== null )
{
strParam= "";
}用三元運(yùn)算符?簡(jiǎn)化寫法,取出para的值。
string strParam=Request.Params["para"] == null ? "":Request.Params["para"];
三、null合并運(yùn)算符(??)
?? 運(yùn)算符稱為“ null 合并運(yùn)算符”,用于定義可以為 null 值的類型和引用類型的默認(rèn)值。合并運(yùn)算符為類型轉(zhuǎn)換定義了一個(gè)預(yù)設(shè)值,以防可空類型的值為Null。
如果此運(yùn)算符的左操作數(shù)不為 null,則此運(yùn)算符將返回左操作數(shù);否則返回右操作數(shù)。
int? x = null;//定義可空類型變量 int? y = x ?? 1000;//使用合并運(yùn)算符,當(dāng)變量x為null時(shí),預(yù)設(shè)賦值1000 Console.WriteLine(y.ToString()); //1000
null 合并運(yùn)算符為右結(jié)合運(yùn)算符,即操作時(shí)從右向左進(jìn)行組合的。如,“a??b??c”的形式按“a??(bb??cc)”計(jì)算。
如果在嘗試將可以為 null 值的類型分配給不可以為 null 值的類型時(shí)沒(méi)有使用 ?? 運(yùn)算符,則會(huì)生成編譯時(shí)錯(cuò)誤。如果使用強(qiáng)制轉(zhuǎn)換,且當(dāng)前還未定義可以為 null 值的類型,則會(huì)引發(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條件運(yùn)算符(?.)
在C# 6.0中,引入了一個(gè) ?. 的運(yùn)算符。
如果對(duì)象為NULL,則不進(jìn)行后面的獲取成員的運(yùn)算,直接返回NULL
void Main()
{
//首先我們定義全局變量Person對(duì)象,有可能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.三元運(yùn)算符寫法,單問(wèn)號(hào)?
telePhoneNo = p != null ? (p.Secret != null ? p.Secret.TelePhoneNo : "") : "";
//C. NULL檢查運(yùn)算符?.
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; }
}五、?[]"運(yùn)算符:
用于在執(zhí)行成員訪問(wèn) (?.) 或索引 (?[) 操作之前,測(cè)試是否存在 NULL。 這些運(yùn)算符可幫助編寫更少的代碼來(lái)處理 null 檢查,尤其是對(duì)于下降到數(shù)據(jù)結(jié)構(gòu)。
int? count = customers?[0]?.Orders?.Count(); // null if customers, the first customer, or Orders is null
到此這篇關(guān)于C#中單問(wèn)號(hào)(?)和雙問(wèn)號(hào)(??)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#中的ICustomFormatter及IFormatProvider接口用法揭秘
這篇文章主要介紹了C#中的ICustomFormatter及IFormatProvider接口用法揭秘,本文能過(guò)分析一段代碼得出一些研究結(jié)果,需要的朋友可以參考下2015-06-06
使用C#實(shí)現(xiàn)阿拉伯?dāng)?shù)字到大寫中文的轉(zhuǎn)換
這篇文章主要介紹了C#實(shí)現(xiàn)阿拉伯?dāng)?shù)字轉(zhuǎn)為大寫中文的實(shí)現(xiàn)代碼,需要的朋友可以參考下2007-03-03
C#中Request.Cookies 和 Response.Cookies 的區(qū)別分析
本文通過(guò)實(shí)例代碼向我們展示了C#中Request.Cookies 和 Response.Cookies 的區(qū)別,文章淺顯易懂,這里推薦給大家。2014-11-11
C# 結(jié)合 Javascript 測(cè)試獲取天氣信息
本文將介紹如何使用 C# 并結(jié)合 JavaScript 獲取天氣信息,獲取的數(shù)據(jù)來(lái)源于360瀏覽器首頁(yè)數(shù)據(jù),對(duì)C# 獲取天氣信息示例代碼感興趣的朋友一起看看吧2024-08-08
C#如何通過(guò)匿名類直接使用訪問(wèn)JSON數(shù)據(jù)詳解
這篇文章主要給大家介紹了關(guān)于C#如何通過(guò)匿名類直接使用訪問(wèn)JSON數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧。2018-02-02
淺談static a[n*m]={0};中static的作用
下面小編就為大家?guī)?lái)一篇淺談static a[n*m]={0};中static的作用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03

