?: Operator (C# Reference)條件運算符返回類型與文字數字
要麼first_expression和second_expression的類型必須是 相同,或隱式轉換必須存在從一種類型到另一個。
如果文字沒有後綴,它具有第一這些類型的,其中 其值可以表示的:整數,UINT,長,ULONG。
考慮:
var value = test ? (Int64)1 : 0;
0,一個十進制數字面沒有後綴將被轉化爲int
。 int
可以隱式轉換爲Int64
。由於此轉換隻發生在一個方向上,因此我們可以感覺到返回值將是Int64。
然而:
var value = test ? (UInt64)1 : 0;
UInt64
和int
不能隱式相互轉化,但還沒有這個代碼編譯和運行以及所產生的類型是UInt64
。
什麼時候確定了0
的類型?
如果這兩種類型可以隱式地相互轉換,那麼您最終會選擇哪種類型? (我不認爲這通常發生,但用戶生成的類可以實現這樣的鑄造。)
以前的研究:
我發現有類似標題的幾個其他問題,但他們都與空或空類型。
相關性: 這在我的代碼中很重要,因爲我們立即將此結果傳遞給ByteWriter.Write,並希望以寫入正確字節數的正確過載結束。這些例子當然是非常簡單的。
替代語法,使得結果明確可能爲清晰起見,最好選擇無論什麼是真正發生的事情沒有明確的轉換:
var value = test ? (UInt64)1 : (UInt64)0;
我遇到了一些問題之前,如果一個值是一個常量,我懷疑這是相關的,但嚴格通過引用的文檔,這不應該工作。 –
@DeniseSkidmore這是重要的,如果它是不變的。要引用的文檔是* [隱式常量表達式轉換](http://msdn.microsoft.com/zh-cn/library/aa691286.aspx)*。請注意,通過第一個項目符號'int' ***可以隱式地(使用常量)轉換爲'ulong'。 –