C# 條件運算子與隱式位元組轉換:型別安全問題
將條件運算子 (? :
) 與隱式位元組轉換一起使用可能會導致 C# 中的編譯錯誤。 例如,aByteValue = aBoolValue ? 1 : 0;
看起來很簡單,但由於類型不相容而失敗。
C# 的強型別系統要求作業中的型別相容。條件運算子的類型由其 true 和 false 表達式決定。 在範例中,1
和 0
是整數,使整個表達式成為整數。 將此整數分配給 byte
變數 (aByteValue
) 是有問題的,因為 byte
的範圍比 int
更小。 編譯器會阻止這種隱式轉換以維護型別安全性。
解決方案涉及明確轉換:aByteValue = aBoolValue ? (byte)1 : (byte)0;
。這明確地將整數文字轉換為字節,解決了類型不匹配的問題。
此行為源自於 C# 的型別推論機制,該機制優先考慮獨立於賦值目標來決定表達式類型。即使有不同類型的多個賦值目標,這也能確保類型安全。
此規則的唯一例外是 lambda 表達式,其中採用基於上下文的類型推論來與周圍程式碼相容。
以上是為什麼 C# 在使用條件運算子進行隱式位元組轉換時會拋出錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!