14

我有以下代码:

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

使用 ReactiveUI INPC 支持。编译器总是警告我Trochoid从未分配过并且永远为空。然而,由于RaiseAndSetIfChanged通过CallerMemberName支持执行的魔法,代码确实有效并且编译器是错误的。

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

4

3 回答 3

15

如何在我的代码中完全抑制这些警告

不适当分配的替代方法是仅 a #pragma

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

这应该可行,并且它将丑陋准确地保留在记录它有意义的地方 - 在字段声明中。

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

当然,您是否将其视为“干净”是一个品味问题。我认为我更喜欢它而不是仅用于消除警告的副作用的作业。

于 2013-02-08T08:33:44.180 回答
7

现在每个平台都有CallerMemberNameAttributeReactiveUI 的支持,你就不用再受强迫编译器的压迫了:

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

其他的重载现在真的没必要了,但我把它们留在里面,因为删除它们是一个重大的改变,因此在 ReactiveUI 5.0 之前不会完成

于 2013-02-08T19:40:14.880 回答
4

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

ViewPortViewModel _Trochoid = null;
于 2013-02-08T08:25:39.900 回答