c#条件运算符和隐式字节铸造:类型安全问题
>使用带有隐式字节铸造的条件运算符(? :
)可能导致C#中的汇编错误。 例如,aByteValue = aBoolValue ? 1 : 0;
出现直截了当,但由于类型不兼容而失败。
c#的强键入系统需要兼容的分配类型。条件运算符的类型由其真实和错误表达式确定。 在示例中,1
和0
是整数,使整个表达式成为整数。 将此整数分配给byte
>变量(aByteValue
)是有问题的,因为Abyte
的范围小于int
。 编译器可防止这种隐式转换以保持类型安全性。
该解决方案涉及显式铸造:aByteValue = aBoolValue ? (byte)1 : (byte)0;
。这明确将整数文字转换为字节,从而解决类型不匹配。
这种行为源于C#的类型推理机制,该机制优先确定表达式类型独立于其分配目标。即使有多种类型的分配目标,这也可以确保类型的安全性。
>>此规则的唯一例外是使用lambda表达式,其中基于上下文的类型推理用于与周围代码的兼容性。
以上是C#在使用带有隐式字节铸造的条件运算符时会丢弃错误?的详细内容。更多信息请关注PHP中文网其他相关文章!