簡體   English   中英

為什么C#內聯如果結果與if不同?

[英]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.

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