在 C# 中禁止显示"Member is never assigned to"警告



我有以下代码:

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

使用ReactiveUI INPC支持。编译器总是警告我,Trochoid从未被赋值,并且将永远为null。然而,由于RaiseAndSetIfChanged通过CallerMemberName支持执行的神奇功能,代码确实有效,编译器是错误的。

如何在代码中干净地抑制这些警告?

如何干净地在我的代码中抑制这些警告

不适当分配的替代方案是仅使用#pragma:

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

这应该是有效的,它将丑陋的东西准确地记录在有意义的地方——字段声明。

如果以相同的方式处理多个字段,则可以将它们全部放在禁用警告的同一"块"中,并对所有字段应用注释。

当然,你是否认为这是一个"干净"的问题。我想我更喜欢它,而不是那些只针对删除警告的副作用的分配。

既然每个平台都在ReactiveUI中支持CallerMemberNameAttribute,就没有必要承受强迫症编译器的压迫

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

其他重载现在真的没有必要了,但我保留了它们,因为删除它们是一个突破性的更改,因此在ReactiveUI 5.0

之前不会完成

您可以为它指定一个引用类型的默认值:

ViewPortViewModel _Trochoid = null;

相关内容

最新更新