在C#中禁止“永远不会将成员分配给”警告

时间:2013-02-08 08:24:17

标签: c# inotifypropertychanged suppress-warnings reactiveui callermembername

我有以下代码:

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

使用ReactiveUI INPC支持。编译器总是警告我Trochoid永远不会被赋值,并且始终为null。但是由于RaiseAndSetIfChanged通过CallerMemberName支持执行的魔力,代码确实有效并且编译器错误。

如何干净地在我的代码中禁止这些警告?

3 个答案:

答案 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;