C ?問號運算子知多少

2021-08-20 12:51:08 字數 2071 閱讀 9768

總結一下c#中問號有三種

第一:三目操作運算子【 ? : 】

問號前面的是條件,後面的是結果,條件滿足返回冒號前面的值否則後面的值

事例[csharp] 

view plain

copy

"white-space:pre"

>    

public

intwhobig(

inta, 

intb)  

public

intwhosmall(

inta, 

intb)  

第二:基本資料型別可空識別符號【?】

宣告的變數可以為空,比如int,string,但是布林值為空依然報錯

事例[csharp] 

view plain

copy

"white-space:pre"

>    

inti = 

null

;//報錯

bool

j = 

null

; //報錯

int? k = 

null

;//通過

bool

? m = 

null

; //報錯

第三:null合併運算子【??】

賦值的結果中的變數如果為空則用??後面的值替代前面的變數,否則直接用前面的變數

如果此運算子的左運算元不為 null,則此運算子將返回左運算元;否則返回右運算元

事例[csharp] 

view plain

copy

"white-space:pre"

>    

public

string

hongyan(

string

a)  

如果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)。 有太多不明確的分析情況來允許它。

C 中的問號運算子

c 中的問號運算子分為三種功能 第一種 單問號作為條件判斷的三元運算子。這種方式可以處理一些簡單的if結構的條件語句,比如簡單的根據條件結果賦值的功能 inta 4 intb 4 intc b 0?b a 上面的 實現了如果變數b的值大於0,則將b的值賦給c,否則將a的值賦給c。第二種 單問號做為基...

c 小技巧 單問號和雙問號 位運算子

作用 用於給變數設初化的時候,給變數 int型別 賦為null值,而不是0。例子 public int a 預設值為0 public int b 預設值為null 參考 作用 用於判斷並賦值,先判斷當前變數是否為null,如果是就可以賦乙個新值,否則跳過。例子 public int?b 預設值為nu...

C 運算子 各種問號的用法和說明

1 可空型別修飾符 引用型別可以使用空引用表示乙個不存在的值,而值型別通常不能表示為空,例如 string str null 是正確的。int i null 編譯器將報錯。為了使值型別也可為空,可空型別出現了,可空型別使用可空型別修飾符?來表示,表現形式為t?例 int?表示是可空的整形,datet...