0

C# オブジェクト初期化子を使用してオブジェクトを作成しようとしています。しかし、そのクラスには、必要に応じて1つの引数を持つコンストラクターが既にあり、デフォルトのコンストラクターは必要ないため、提供しませんでした。クラスにユーザー提供のコンストラクターがある場合、コンパイラーもデフォルトのコンストラクターを提供しません。

オブジェクト初期化子を使用してこのクラスのインスタンスを作成しようとすると、問題が発生します。

public class Foo
{
    public int Data { get; set; }
    public Foo(int Data)
    {
        this.Data = Data;
    }
}

次のようにクラスをインスタンス化します。

 Foo f=new Foo { Data=10};

そして今、コンパイル時エラーが発生しています:

「Foo には、0 引数を取るコンストラクターが含まれていません」

私はエラーを知っています。それはデフォルトのコンストラクターがないためです。デフォルトのコンストラクターが必要ないのに、オブジェクト初期化子を使用するためだけにコンストラクターを提供する必要があるのはなぜですか? デフォルトのコンストラクターを明示的に提供せずにこのオブジェクト初期化子を使用できる他の方法 (スタイル、構文) はありますか?

このMSDNリンクを確認しました。クラスにプライベートデフォルトコンストラクターがある場合、オブジェクト初期化子を使用できないと書かれていますが、ここにはプライベートデフォルトコンストラクターがありません。

4

3 に答える 3

6

オブジェクトを適切に初期化するために必要な引数を受け入れるコンストラクターが既にある場合は、適切なコンストラクター構文を使用してみませんか?

Foo f = new Foo { Data = 10 };  // What you want (object initializer syntax)
Foo f = new Foo ( Data : 10 );  // What you can get (constructor syntax)
于 2013-09-01T17:05:23.433 に答える
4

次に、オブジェクト初期化子を使用しないでください。コンストラクターを介して値を渡すだけです。

Foo f=new Foo(10);

オブジェクト初期化子を使用する場合は、次のことができます。

Foo f=new Foo(10){ Data=10};

しかし、同じ値を2回設定しているので意味がありません

于 2013-09-01T17:04:42.663 に答える