Поделиться через


Ошибка компилятора 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" }
        };
    }
}

Дополнительные сведения о необходимых элементах см. в справочной статье об обязательных модификаторах, а также в руководстве по инициализаторам объектов и коллекций.