编译器错误 CS0075
若要强制转换某个负值,必须将该值放在括号内
如果使用标识预定义类型的关键字进行强制转换,则不需要括号。 否则,必须用括号括起来,因为 (x) –y 不会被视为强制转换表达式。 摘自 C# 规范的第 7.6.6 节:
从消除歧义规则可以导出下述结论:如果 x 和 y 是标识符,则 (x)y、(x)(y) 和 (x)(-y) 是强制转换表达式,但 (x)-y 不是,即使 x 标识的是类型。 但是,如果 x 是一个标识预定义类型(如 int)的关键字,则所有这四种形式均为强制转换表达式(因为这种关键字本身不可能是表达式)。
以下代码生成 CS0075:
C#
// 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
}
}
}