Подавить "Участник никогда не назначается" предупреждение в С# - программирование
Подтвердить что ты не робот

Подавить "Участник никогда не назначается" предупреждение в С#

У меня есть следующий код:

ViewPortViewModel _Trochoid;
public ViewPortViewModel Trochoid
{
    get { return _Trochoid; }
    set { this.RaiseAndSetIfChanged(value); }
}

с поддержкой ReactiveUI INPC. Компилятор всегда предупреждает меня, что Trochoid никогда не назначается и всегда будет нулевым. Однако из-за магии, которую RaiseAndSetIfChanged выполняет с помощью поддержки CallerMemberName, код действительно работает, а компилятор ошибочен.

Как я могу полностью удалить эти предупреждения в своем коде?

4b9b3361

Ответ 1

Как чисто подавить эти предупреждения в моем коде

Альтернативой ненадлежащему назначению будет только #pragma:

#pragma warning disable 0649 // Assigned by reflection
ViewPortViewModel _Trochoid;
#pragma warning restore 0649

Это должно работать, и оно сохраняет уродство именно в том месте, где имеет смысл документировать его - в декларации поля.

Если у вас несколько полей обрабатываются одинаково, вы можете поместить их в один и тот же "блок" отключенных предупреждений с комментарием, применимым ко всем из них.

Если вы рассматриваете это как "чистое" или нет, это вопрос вкуса, конечно. Я думаю, что я предпочитаю его назначать, которые есть только для побочного эффекта удаления предупреждений.

Ответ 2

Теперь, когда каждая платформа имеет поддержку CallerMemberNameAttribute в ReactiveUI, вам не нужно страдать от угнетения вашего Obsessive Compulsive Compiler:

ViewPortViewModel _Trochoid;
public ViewPortViewModel Trochoid
{
    get { return _Trochoid; }
    set { this.RaiseAndSetIfChanged(ref _Trochoid, value); }
}

Другие перегрузки теперь действительно не нужны, но я их оставляю, потому что их удаление является нарушением и поэтому не будет выполнено до тех пор, пока ReactiveUI 5.0

Ответ 3

Его можно присвоить по умолчанию для ссылочного типа:

ViewPortViewModel _Trochoid = null;