C# 條件運算符和隱式類型轉換問題
C# 條件運算符 (?:
) 可能會導致意外的類型轉換錯誤。 一個常見的場景涉及將布爾值分配給字節變量:
<code class="language-csharp">byte aByteValue; bool aBoolValue = true; aByteValue = aBoolValue ? 1 : 0; // Error: Cannot implicitly convert type 'int' to 'byte'</code>
此代碼失敗,因為條件運算符的類型由其操作數(1 和 0)確定。 C# 將這些文字數字視為 int
類型。 因此,該運算符會生成 int
結果,該結果無法隱式轉換為 byte
.
與目標變量的類型決定轉換的典型賦值不同,條件運算符優先考慮其分支的公共類型。在這種情況下,兩個分支都可以隱式轉換為 int
,使 int
成為結果類型。
解決方案:顯式轉換
解決方案是將條件表達式顯式轉換為 byte
:
<code class="language-csharp">aByteValue = aBoolValue ? (byte)1 : (byte)0; // Correct</code>
此顯式轉換可確保條件表達式的計算結果為 byte
,從而解決隱式轉換錯誤。 編譯器現在可以理解預期的類型並安全地執行必要的轉換。
以上是為什麼 C# 的條件運算子隱式類型轉換失敗以及如何解決?的詳細內容。更多資訊請關注PHP中文網其他相關文章!