[英]Why C# inline if result is different than if?
這是我的代碼:
object w = 44;
var k1 = (w is double
? ((Convert.ToSingle(w)))
: ((unchecked((uint)Convert.ToInt64(w)))));
if (w is double)
{
w = 22;
}
結果是k1
= 44.0且w
== 44;
我想知道為什么結果不同!
假設w
是double,在這種情況下, k1
應該是44.0而w
應該是22。
現在讓我們假設w
不是兩倍,在這種情況下, k1
應該是44, w
應該是44。
問題是什么 !?
無論w
類型是什么,用於初始化k1
的條件表達式的類型都是相同的。 編譯器必須根據2個可能值的類型在編譯時確定條件表達式類型。
cond ? float: uint
這些類型不一樣,但uint
可以隱式轉換為float
因此編譯器選擇它作為返回類型
w
是一個int(44)。 三元表達式的類型是float,因此k1
是float。
因此,執行三元組的“假”分支, k1
為:
k1 = (float)((unchecked((uint)Convert.ToInt64(w)))))
注意:
object w = 44;
object k1 = (w is double ? (object)((Convert.ToSingle(w))) : (object)((unchecked((uint)Convert.ToInt64(w)))));
if (w is double)
{
w = 22;
}
Console.WriteLine("{0}, {1}", w.GetType(), k1.GetType());
Console.ReadLine();
魔術,它現在告訴你它是一個uint :-)
問題是從uint到float的隱式轉換,這是因為三元條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.