簡體   English   中英

右側的三元/空合並運算符和賦值表達式?

[英]Ternary/null coalescing operator and assignment expression on the right-hand side?

在C#中嘗試使用三元和空合並運算符時,我發現可以在表達式的右側使用賦值,例如,這是一個有效的C#代碼:

int? a = null;
int? b = null;
int? c = a ?? (b = 12);
int? d = a == 12 ? a : (b = 15);

奇怪的是,不僅表達式右側的賦值被評估到它自己的右側(意味着這里的第三行被評估為12而不是像b = 12 => void ),但是這個賦值也有效,因此在一個語句中分配了兩個變量。 也可以使用任何可用變量在此賦值的右側使用任何可計算表達式。

這種行為在我看來很奇怪。 我記得if (a = 2)而不是if (a == 2)在C ++中的比較時遇到麻煩,它總是被評估為true ,這是從Basic / Haskell切換到C ++之后的常見錯誤。

它是一個記錄的功能嗎? 它有什么名字嗎?

這是因為賦值運算符也返回值:

賦值運算符(=)將其右側操作數的值存儲在由其左側操作數表示的存儲位置,屬性或索引器中,並將該值作為結果返回。

表達式b = 12不僅將12分配給b ,還返回該值。

多個賦值在C#中有效:

int a;
int b;
int c;
a = b = c = 5;
//all variables = 5;

if(6 == (c = 6)){
   //this will be true;
}

如果將變量放在等式的右側,即使它剛剛在同一行上分配了一個值,它也會返回其值/引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM