Freigeben über


Compilerfehler CS9036

Dem erforderlichen Element "memberName" muss ein Wert zugewiesen werden, es kann kein geschachteltes Element oder ein Sammlungsinitialisierer verwendet werden.

Beim Initialisieren eines Objekts mit einem required Element müssen Sie dem Element direkt einen Wert zuweisen. Sie können ein geschachteltes Element oder einen Sammlungsinitialisierer nicht verwenden, um Eigenschaften des required Elements festzulegen, ohne es zuerst instanziieren zu müssen.

Beispiel

Im folgenden Beispiel wird CS9036 generiert:

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" }
        };
    }
}

Lösung

Um diesen Fehler zu beheben, weisen Sie direkt eine neue Instanz der erforderlichen Eigenschaft zu und initialisieren ihre Mitglieder:

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" }
        };
    }
}

Weitere Informationen zu erforderlichen Elementen finden Sie im Artikel zur Referenz des erforderlichen Modifizierers und im Leitfaden zu Objekt- und Sammlungsinitialisierern.