[英]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 ++之后的常見錯誤。
它是一個記錄的功能嗎? 它有什么名字嗎?
多個賦值在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.