溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C# ?問號運算符知多少

發布時間:2020-05-26 07:44:23 來源:網絡 閱讀:491 作者:寧金峰 欄目:編程語言

總結一下C#中問號有三種
第一:三目操作運算符【 ? : 】
問號前面的是條件,后面的是結果,條件滿足返回冒號前面的值否則后面的值
事例
[csharp] view plain copy
<span style="white-space:pre"> </span>public int WhoBig(int a, int b)
{
return a > b ? a : b;
}

    public int WhoSmall(int a, int b)  
    {  
        return a < b ? a : b;  
        //等價于  
        /*if (a < b) 
            return a; 
        else 
            return b; 
         * */  
    }  

第二:基本數據類型可空標識符【?】
聲明的變量可以為空,比如int,string,但是布爾值為空依然報錯
事例
[csharp] view plain copy
<span style="white-space:pre"> </span>int i = null;//報錯
bool j = null; //報錯

    int? k = null;//通過  
    bool? m = null; //報錯  

第三:null合并運算符【??】
賦值的結果中的變量如果為空則用??后面的值替代前面的變量,否則直接用前面的變量
如果此運算符的左操作數不為 null,則此運算符將返回左操作數;否則返回右操作數
事例
[csharp] view plain copy
<span style="white-space:pre"> </span>public string Hongyan(string a)
{
string res = a;
if (a == null)
res = "";
//等價于
res = a ?? "";
return res;
}

如果a為空就選擇??后面的值否則前面的值

第四:null條件運算符【?.】
用于在執行成員訪問 (?.) 或索引 (?[) 操作之前,測試是否存在 NULL。 這些運算符可幫助編寫更少的代碼來處理 null 檢查,尤其是對于下降到數據結構。
[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 條件運算符會短路。 如果條件成員訪問和索引操作鏈中的某個操作返回 NULL,則該鏈其余部分的執行將停止。 表達式中優先級較低的其他操作將繼續。 例如,以下的示例中的 E 將始終執行,?? 和 == 操作將執行。
[csharp] view plain copy
A?.B?.C?[0] ?? E
A?.B?.C?[0] == E

NULL 條件成員訪問的另一個用途是使用非常少的代碼以線程安全的方式調用委托。 舊方法需要如下所示的代碼:
[csharp] view plain copy
var handler = this.PropertyChanged;
if (handler != null)
handler(…)

新的方法是要簡單得多:
[csharp] view plain copy
PropertyChanged?.Invoke(e)

新方法是線程安全的,因為編譯器生成代碼以評估 PropertyChanged(僅一次),從而使結果保持在臨時變量中。
你需要顯式調用 Invoke 方法,因為不存在 NULL 條件委托調用語法 PropertyChanged?(e)。 有太多不明確的分析情況來允許它。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女