我有以下代码:
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;