這個問題在這里已經有了答案: 為什么賦值陳述句會回傳一個值? (14 個回答) 56 分鐘前關閉。
我相信在 if 條件的謂詞中執行賦值操作總是會導致 true(在 C# 和任何其他語言中)。但是,當我嘗試這樣的事情時不會發生這種情況(注意我只是在 If 條件中使用單個等于):
class Program
{
static void Foo()
{
bool someVar = false;
if (someVar = true)
System.Diagnostics.Debug.WriteLine("This gets printed"); // as expected
}
static void Bar()
{
bool someVar = false;
if (someVar = false)
System.Diagnostics.Debug.WriteLine("This DOES NOT get printed"); // I exected this to be printed as well as it
}
static void Main(string[] args)
{
Foo();
Bar();
}
}
誰能解釋一下?是不是因為變數 someVar 被分配了一個假值,它沒有進入 if 條件?
uj5u.com熱心網友回復:
您提供的代碼按預期運行:
if (someVar = false)意味著您分配false給someVar,因此最終結果if(false)不滿足條件。
uj5u.com熱心網友回復:
因為 的回傳值(someVar = false)將是false
uj5u.com熱心網友回復:
不能使用賦值運算子作為條件;等于與雙重等于不同!如果您正在評估條件,則必須與雙等號進行比較。給定foo是一個 bool 變數, this:foo = true;是一個賦值。它分配值的foo,以真實的。這:(foo == true)不是作業;相反,它是一個比較。它將回傳foo當前是否被賦值為true的 bool 值;如果是這樣,它將回傳true,否則它將回傳false。
在這里你的陳述句中發生的事情是,在if()條件中使用比較,而是放入一個變數。通常這不是問題,我可以創建foo然后有一個作為條件的if()陳述句,foo它會檢查如果foo是真的還是假的。但是,您將變數傳遞給陳述句,同時將其分配給值。這就是為什么foo當您設定它時將始終列印該陳述句,而bar始終不會。您所做的相當于設定foo為true并評估它,同樣設定bar為false并評估它。:)
換句話說,這:
bool bar = true;
if(bar = false) {
doSomething;
}
與這樣做是一樣的:
bool bar = true;
bar = false;
if(bar) {
doSomething;
}
因此代碼永遠不會doSomething因為bar總是首先設定為 false。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/372165.html
