Подавить "Участник никогда не назначается" предупреждение в С#
У меня есть следующий код:
ViewPortViewModel _Trochoid;
public ViewPortViewModel Trochoid
{
get { return _Trochoid; }
set { this.RaiseAndSetIfChanged(value); }
}
с поддержкой ReactiveUI INPC. Компилятор всегда предупреждает меня, что Trochoid
никогда не назначается и всегда будет нулевым. Однако из-за магии, которую RaiseAndSetIfChanged
выполняет с помощью поддержки CallerMemberName
, код действительно работает, а компилятор ошибочен.
Как я могу полностью удалить эти предупреждения в своем коде?
Ответы
Ответ 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;