重慶分公司,新征程啟航
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)
總結(jié)一下C#中問號有三種
第一:三目操作運(yùn)算符【 ? : 】
問號前面的是條件,后面的是結(jié)果,條件滿足返回冒號前面的值否則后面的值
事例
[csharp] view plain copy
public int WhoBig(int a, int b)
{
return a > b ? a : b;
}
創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站設(shè)計、做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)伊州,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
public int WhoSmall(int a, int b)
{
return a < b ? a : b;
//等價于
/*if (a < b)
return a;
else
return b;
* */
}
第二:基本數(shù)據(jù)類型可空標(biāo)識符【?】
聲明的變量可以為空,比如int,string,但是布爾值為空依然報錯
事例
[csharp] view plain copy
int i = null;//報錯
bool j = null; //報錯
int? k = null;//通過
bool? m = null; //報錯
第三:null合并運(yùn)算符【??】
賦值的結(jié)果中的變量如果為空則用??后面的值替代前面的變量,否則直接用前面的變量
如果此運(yùn)算符的左操作數(shù)不為 null,則此運(yùn)算符將返回左操作數(shù);否則返回右操作數(shù)
事例
[csharp] view plain copy
public string Hongyan(string a)
{
string res = a;
if (a == null)
res = "";
//等價于
res = a ?? "";
return res;
}
如果a為空就選擇??后面的值否則前面的值
第四:null條件運(yùn)算符【?.】
用于在執(zhí)行成員訪問 (?.) 或索引 (?[) 操作之前,測試是否存在 NULL。 這些運(yùn)算符可幫助編寫更少的代碼來處理 null 檢查,尤其是對于下降到數(shù)據(jù)結(jié)構(gòu)。
[csharp] view plain copy
int? length = customers?.Length; // null if customers is null
Customer first = customers?[0]; // null if customers is null
int? count = customers?[0]?.Orders?.Count(); // null if customers, the first customer, or Orders is null
最后一個示例演示 NULL 條件運(yùn)算符會短路。 如果條件成員訪問和索引操作鏈中的某個操作返回 NULL,則該鏈其余部分的執(zhí)行將停止。 表達(dá)式中優(yōu)先級較低的其他操作將繼續(xù)。 例如,以下的示例中的 E 將始終執(zhí)行,?? 和 == 操作將執(zhí)行。
[csharp] view plain copy
A?.B?.C?[0] ?? E
A?.B?.C?[0] == E
NULL 條件成員訪問的另一個用途是使用非常少的代碼以線程安全的方式調(diào)用委托。 舊方法需要如下所示的代碼:
[csharp] view plain copy
var handler = this.PropertyChanged;
if (handler != null)
handler(…)
新的方法是要簡單得多:
[csharp] view plain copy
PropertyChanged?.Invoke(e)
新方法是線程安全的,因?yàn)榫幾g器生成代碼以評估 PropertyChanged(僅一次),從而使結(jié)果保持在臨時變量中。
你需要顯式調(diào)用 Invoke 方法,因?yàn)椴淮嬖?NULL 條件委托調(diào)用語法 PropertyChanged?(e)。 有太多不明確的分析情況來允許它。