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

bra*_*ing 14 c# inotifypropertychanged suppress-warnings reactiveui callermembername

我有以下代码:

ViewPortViewModel _Trochoid;
public ViewPortViewModel Trochoid
{
    get { return _Trochoid; }
    set { this.RaiseAndSetIfChanged(value); }
}
Run Code Online (Sandbox Code Playgroud)

使用ReactiveUI INPC支持.编译器始终警告我Trochoid永远不会分配给它,并且始终为null.然而,由于RaiseAndSetIfChanged通过CallerMemberName支持执行的魔术,代码确实有效并且编译器是错误的.

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

Jon*_*eet 15

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

不恰当的任务的替代方案是#pragma:

#pragma warning disable 0649 // Assigned by reflection
ViewPortViewModel _Trochoid;
#pragma warning restore 0649
Run Code Online (Sandbox Code Playgroud)

这应该是有效的,它将丑陋保持在有意义的地方 - 在现场宣言中记录它.

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

当然,你是否认为这是"干净"是一个品味问题.我认为我更喜欢它只用于删除警告的副作用的分配.


Ana*_*tts 7

现在每个平台都有CallerMemberNameAttributeReactiveUI的支持,没有必要遭受强迫性编译器的压迫:

ViewPortViewModel _Trochoid;
public ViewPortViewModel Trochoid
{
    get { return _Trochoid; }
    set { this.RaiseAndSetIfChanged(ref _Trochoid, value); }
}
Run Code Online (Sandbox Code Playgroud)

其他重载现在实际上是不必要的,但我留下它们是因为删除它们是一个重大变化,因此直到ReactiveUI 5.0才会完成