我有以下代码:
ViewPortViewModel _Trochoid;
public ViewPortViewModel Trochoid
{
get { return _Trochoid; }
set { this.RaiseAndSetIfChanged(value); }
}
使用ReactiveUI INPC支持。编译器总是警告我Trochoid
永远不会被赋值,并且始终为null。但是由于RaiseAndSetIfChanged
通过CallerMemberName
支持执行的魔力,代码确实有效并且编译器错误。
如何干净地在我的代码中禁止这些警告?
答案 0 :(得分:15)
如何干净地在我的代码中禁止这些警告
不恰当分配的替代方法是#pragma
:
#pragma warning disable 0649 // Assigned by reflection
ViewPortViewModel _Trochoid;
#pragma warning restore 0649
这应该有效,并且在现场宣言中将丑陋保持在记录它的地方。
如果您以相同的方式处理多个字段,则可以将它们全部放在禁用警告的相同“块”中,并且注释适用于所有字段。
当然,无论你认为这是否“干净”都是品味问题。我想我更喜欢分配只有副作用删除警告的分配。
答案 1 :(得分:6)
现在每个平台在ReactiveUI中都有CallerMemberNameAttribute
支持,没有必要遭受强迫性编译器的压迫:
ViewPortViewModel _Trochoid;
public ViewPortViewModel Trochoid
{
get { return _Trochoid; }
set { this.RaiseAndSetIfChanged(ref _Trochoid, value); }
}
其他重载现在实际上是不必要的,但我留下它们是因为删除它们是一个重大变化,因此直到ReactiveUI 5.0才会完成
答案 2 :(得分:4)
您可以为引用类型指定默认值:
ViewPortViewModel _Trochoid = null;