コンパイラ エラー CS0075Compiler Error CS0075

負の値をキャストするには、値をかっこで囲んでください。To cast a negative value, you must enclose the value in parentheses

定義済みの型を指定するキーワードを使用してキャストしている場合、かっこを付ける必要はありません。If you are casting using a keyword that identifies a predefined type, then you do not need parentheses. それ以外の場合は、かっこを付ける必要があります。(x) –y がキャスト式と見なされないためです。Otherwise, you must put the parentheses because (x) –y will not be considered a cast expression. 以下は「C# 言語の仕様」のセクション 7.6.6 からの抜粋です。From the C# Specification, Section 7.6.6:

ここでは、x と y が識別子、(x) y、(x) (y)、および (x) (-y) がキャスト式であるにもかかわらず、x が型を識別する場合でも、あいまいさの規則に従います。ただし、x が定義済みの型 (int など) を識別するキーワードである場合、4つのすべての形式はキャスト式になります (このようなキーワードは、それ自体が式であるとは限りません)。From the disambiguation rule it follows that, if x and y are identifiers, (x)y, (x)(y), and (x)(-y) are cast-expressions, but (x)-y is not, even if x identifies a type. However, if x is a keyword that identifies a predefined type (such as int), then all four forms are cast-expressions (because such a keyword could not possibly be an expression by itself).

次のコードでは CS0075 が生成されます。The following code generates 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  
        }  
    }  
}  

関連項目See also