使用英语阅读

通过


编译器错误 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  
        }  
    }  
}  

另请参阅