Подавить предупреждение "Участник никогда не назначается" в 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;
Другие вопросы по тегам