Как заставить [DisallowNull] показывать ошибку для инициализатора объекта? - PullRequest
3 голосов
/ 13 января 2020

. Net Core позволяет вам украсить свойство с помощью [DisallowNull] , чтобы сообщить компилятору, что коду не разрешено устанавливать свойство равным нулю, даже если само свойство объявлено как разрешить это. Например:

public sealed class Test
{
    [DisallowNull] public string? Text { get; set; }
}

Это прекрасно работает, когда вы пытаетесь явно установить для свойства значение null:

var test = new Test();
test.Text = null; // Warning: "Cannot convert null literal to non-nullable reference type".

Однако оно не работает, если вы используете инициализатор объекта:

var test = new Test
{
    Text = null  // No warning. I want one.
};

Есть ли способ заставить приведенный выше код вызвать предупреждение / ошибку компилятора?

1 Ответ

2 голосов
/ 13 января 2020

Пока исправление не выпущено, вы можете обойти это, перевернув его:

public sealed class Test
{
    [MaybeNull] public string Text { get; set; } = null!;
}

Это предупреждает, что Text имеет значение по умолчанию null (следовательно, необходимо подавить это с = null!), но в остальном кажется, что вы хотите.

SharpLab

...