更新: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
        }
    }
}

请参见

参考

强制转换和类型转换(C# 编程指南)