CS801~2000

C# コンパイラエラー CS1526の原因と対策について解説

CS1526エラーは、C#のコードでnew演算子を使用する際に、型の直後に()、[]、または{}を記述していない場合に発生します。

たとえば、newの後に括弧を省略してインスタンスを生成しようとするとこのエラーとなります。

正しい構文で記述することで解消できます。

CS1526エラーとは

エラーメッセージの内容

コンパイラから表示されるエラーメッセージは「新しい式は型の後に ()、[]、または {} が必要です」となります。

このエラーは、new演算子を用いてオブジェクトや配列を生成する場合に、型指定の後ろに必要な記号が抜けているときに発生します。

メッセージに示される通り、型の後に必ず括弧や角括弧、または波括弧を付ける必要があるため、正しい記述を行う必要があります。

発生する状況

このエラーは主に以下のような状況で発生します。

  • オブジェクト生成時: クラスのインスタンスを作成する際に、コンストラクタ呼び出しの括弧を省略してしまった場合
  • 配列生成時: 配列を宣言する際に、正しい角括弧の構文を使用していない場合

例えば、クラスMyClassのインスタンス生成でnew MyClass;という記述をしてしまうとCS1526エラーが発生します。

正しくはnew MyClass()と記述する必要があります。

エラー発生の原因

new演算子の基本ルール

C#におけるnew演算子は、メモリ上に新しいオブジェクトや配列の領域を割り当てるために用いられます。

型を指定した後に、オブジェクト生成や配列作成のための構文が必須とされます。

この構文ルールを守らないと、CS1526エラーが発生してしまいます。

型の記述と括弧の必要性

クラスなどのオブジェクト生成の場合、型名の後に必ず括弧()を付ける必要があります。

括弧内に引数を記述することで、コンストラクタが呼び出される仕組みです。

もし括弧を省略すると、C#のコンパイラは正しく構文解析ができずエラーとなります。

数式で表現すると、正しい形式は

new TypeName(引数)

と記述されなければなりません。

配列とオブジェクトの違い

配列を生成する場合は、型名とともに角括弧[]を指定し、配列のサイズを宣言します。

例えば、整数配列なら

int[] numbers = new int[5];

のように記述します。

一方、オブジェクトの場合は、コンストラクタ呼び出しの括弧が必要です。

これらの記述方法の違いを理解していないと、間違った構文によってエラーが発生する原因となります。

典型的な記述ミス

括弧省略によるエラー

最も多い記述ミスは、オブジェクト生成時に括弧を省略するケースです。

例えば、クラスExampleのインスタンスを作成する際に

Example instance = new Example;

と記述すると、コンパイラはコンストラクタの呼び出しと認識できず、CS1526エラーが出ます。

正しい記述は

Example instance = new Example();

となります。

このように、括弧の記述漏れがエラーの直接的な原因となるため、注意して記述する必要があります。

対策と修正方法

正しい構文への修正

オブジェクト生成の正しい記述

オブジェクト生成の際には、型名の後に必ず括弧()を記述して、コンストラクタを正しく呼び出す必要があります。

以下は、クラスMyClassのインスタンスを正しく生成する例です。

using System;
public class MyClass {
    // フィールドの初期化
    public int Value;
    public MyClass() {
        Value = 10; // コンストラクタ内で初期値を設定
    }
}
public class Program {
    public static void Main() {
        // 正しいオブジェクト生成の記述
        MyClass instance = new MyClass();
        Console.WriteLine("Instance created with Value: " + instance.Value);
    }
}
Instance created with Value: 10

配列生成の正しい記述

配列を生成する際は、型名に続き角括弧[]とサイズを示す値を含めた記述を行います。

以下は、整数型配列の生成例です。

using System;
public class Program {
    public static void Main() {
        // 正しい配列生成の記述
        int[] numbers = new int[5];
        numbers[0] = 1;
        numbers[1] = 2;
        Console.WriteLine("配列の最初の要素: " + numbers[0]);
    }
}
配列の最初の要素: 1

コード修正の手順

誤ったコード例の解説

よく見かける記述ミスとして、コンストラクタの呼び出し部分で括弧が省略されるケースがあります。

以下は、誤った記述の例です。

// 誤ったコード
public class Sample {
    public int Counter = 0;
}
public class Program {
    public static void Main() {
        // 括弧が抜けているためコンパイルエラーが発生する
        Sample sampleInstance = new Sample;
        Console.WriteLine("Counter: " + sampleInstance.Counter);
    }
}

上記のコードでは、Sample sampleInstance = new Sample;と記述しているため、new Sample()のように括弧を追加する必要があります。

修正後コード例の検証

以下は、上記の誤りを修正したコード例です。

new Sample()とすることで、正しくコンストラクタが呼び出され、プログラムが意図した動作を行います。

using System;
public class Sample {
    public int Counter = 0;
}
public class Program {
    public static void Main() {
        // 正しいオブジェクト生成の記述
        Sample sampleInstance = new Sample();
        Console.WriteLine("Counter: " + sampleInstance.Counter);
    }
}
Counter: 0

実践的なコード例

修正前のコード解説

エラー発生箇所の特定

コンパイラエラーCS1526が発生するケースとして、以下のコードを考えてみます。

このコードでは、new yと記述している部分が問題となります。

コンパイラは型名の後に必ず()が必要であるため、括弧の省略が認識されずエラーとなります。

// 修正前の誤ったコード例
public class Y {
    public static int globalCounter = 0;
    public int instanceCounter = 0;
}
public class Z {
    public static void Main() {
        // エラー発生:括弧が抜けているためCS1526が発生
        Y yInstance = new Y;
        // 配列の宣言は正しい例
        Y[] yArray = new Y[10];
        for (int i = 0; i < yArray.Length; i++)
            yArray[i] = new Y();   // 正しくコンストラクタが呼び出される
    }
}

上記のコードでは、Y yInstance = new Y;の部分がCS1526エラーを引き起こす箇所であることがわかります。

修正後のコード解説

正しい実行結果の確認

以下のコードは、上記のエラー部分を修正したものです。

new Y()とすることで正しくコンストラクタが呼び出され、プログラムがコンパイルおよび実行されます。

using System;
public class Y {
    public static int globalCounter = 0;
    public int instanceCounter = 0;
}
public class Z {
    public static void Main() {
        // 括弧を追加して正しいオブジェクト生成となっている
        Y yInstance = new Y();
        // 配列の宣言も合わせて使用
        Y[] yArray = new Y[10];
        for (int i = 0; i < yArray.Length; i++)
            yArray[i] = new Y();   // 各オブジェクトは正しく生成される
        Console.WriteLine("オブジェクトが正しく生成されました。");
    }
}
オブジェクトが正しく生成されました。

このように、括弧の有無に注意することで、CS1526エラーを防止し、正しくコンパイル・実行できるコードを作成することができます。

まとめ

この記事では、C#コンパイラエラーCS1526について、エラーメッセージの内容や発生する状況を解説しています。

new演算子使用時の型指定後の括弧の必要性、配列とオブジェクトの違い、さらには括弧省略という記述ミスにより発生するエラーについて具体例を通して説明しました。

また、正しい構文への修正方法と具体的なコード例を用いて、エラー解消の手順を理解できるようにまとめています。

関連記事

Back to top button