Condividi tramite


Errore del compilatore CS9036

Al membro obbligatorio 'memberName' deve essere assegnato un valore; non può usare un membro annidato o un inizializzatore di collezioni.

Quando si inizializza un oggetto con un required membro, è necessario assegnare direttamente al membro un valore. Non è possibile utilizzare un membro annidato o un inizializzatore di collezione per impostare le proprietà del membro required senza averne prima creato un'istanza.

Esempio

L'esempio seguente genera l'errore 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" }
        };
    }
}

Soluzione

Per correggere l'errore, assegnare direttamente una nuova istanza della proprietà richiesta e inizializzare i relativi membri:

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

Per altre informazioni sui membri necessari, vedere l'articolo di riferimento del modificatore richiesto e la guida inizializzatori di oggetti e raccolte .