次の方法で共有


コンパイラ エラー CS9036

必要なメンバー 'memberName' には値を割り当てる必要があります。入れ子になったメンバーまたはコレクション初期化子を使用することはできません。

required メンバーを使用してオブジェクトを初期化する場合は、メンバーに値を直接割り当てる必要があります。 入れ子になったメンバーまたはコレクション初期化子を使用して、最初にインスタンス化せずに required メンバーのプロパティを設定することはできません。

次の例では CS9036 が生成されます。

class C
{
    public string? Prop { get; set; }
}

class Program
{
    public required C C { get; set; }

    static void Main()
    {
        var program = new Program()
        {
            // error CS9036: Required member 'Program.C' must be assigned a value, it cannot use a nested member or collection initializer.
            C = { Prop = "a" }
        };
    }
}

解決策

このエラーを修正するには、必要なプロパティの新しいインスタンスを直接割り当てて、そのメンバーを初期化します。

class C
{
    public string? Prop { get; set; }
}

class Program
{
    public required C C { get; set; }

    static void Main()
    {
        var program = new Program()
        {
            // Correct: Assign a new instance of C and then initialize its Prop property
            C = new C { Prop = "a" }
        };
    }
}

必要なメンバーの詳細については、 必要な修飾子 のリファレンス記事と オブジェクトおよびコレクション初期化子 ガイドを参照してください。