Подавить предупреждение "Участник никогда не назначается" в C#
У меня есть следующий код:
ViewPortViewModel _Trochoid;
public ViewPortViewModel Trochoid
{
get { return _Trochoid; }
set { this.RaiseAndSetIfChanged(value); }
}
используя поддержку ReactiveUI INPC. Компилятор всегда предупреждает меня, что Trochoid
никогда не назначается и всегда будет нулевым. Однако из-за магии, которая RaiseAndSetIfChanged
выполняет через CallerMemberName
поддержка, код работает и компилятор ошибочен.
Как мне чисто подавить эти предупреждения в моем коде?
3 ответа
Как чисто подавить эти предупреждения в моем коде
Альтернативой неуместному назначению было бы просто #pragma
:
#pragma warning disable 0649 // Assigned by reflection
ViewPortViewModel _Trochoid;
#pragma warning restore 0649
Это должно сработать, и оно сохраняет уродство именно там, где имеет смысл документировать его - при объявлении поля.
Если несколько полей обрабатываются одинаково, вы можете поместить их все в один и тот же "блок" отключенных предупреждений с комментарием, применимым ко всем из них.
Считаете ли вы это "чистым" или нет, это вопрос вкуса, конечно. Я думаю, что я предпочитаю это назначениям, которые существуют только для побочного эффекта удаления предупреждений.
Теперь, когда каждая платформа имеет CallerMemberNameAttribute
поддержка в ReactiveUI, нет необходимости страдать от угнетения вашего Obsessive Compulsive Compiler:
ViewPortViewModel _Trochoid;
public ViewPortViewModel Trochoid
{
get { return _Trochoid; }
set { this.RaiseAndSetIfChanged(ref _Trochoid, value); }
}
Другие перегрузки сейчас действительно не нужны, но я оставляю их, потому что их удаление является серьезным изменением и поэтому не будет выполняться до ReactiveUI 5.0
Вы можете назначить его по умолчанию для ссылочного типа:
ViewPortViewModel _Trochoid = null;