更新:2007 年 11 月
错误消息
若要强制转换某个负值,必须将该值放在括号内如果您使用标识预定义类型的关键字进行强制转换,则不需要括号。否则,必须用括号括起来,因为 (x) –y 不会被视为强制转换表达式。摘自 C# 规范的第 7.6.6 节:
从消除歧义规则可以导出下述结论:如果 x 和 y 是标识符,则 (x)y、(x)(y) 和 (x)(-y) 是强制转换表达式,但 (x)-y 不是,即使 x 标识的是类型。但是,如果 x 是一个标识预定义类型(如 int)的关键字,则所有这四种形式均为强制转换表达式(因为这种关键字本身不可能是表达式)。
下面的代码生成 CS0075:
复制代码 | |
---|---|
// CS0075 namespace MyNamespace { enum MyEnum { } public class MyClass { public static void Main() { // To fix the error, place the negative // values below in parentheses int i = (System.Int32) - 4; //CS0075 MyEnum e = (MyEnum) - 1; //CS0075 System.Console.WriteLine(i); //to avoid warning System.Console.WriteLine(e); //to avoid warning } } } |