14

次のコードがあります。

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

ReactiveUI INPC サポートを使用します。Trochoidコンパイラは、決して割り当てられず、常にnullになることを常に警告しています。RaiseAndSetIfChangedただし、サポートを通じて実行される魔法によりCallerMemberName、コードは機能しますが、コンパイラは間違っています。

コードでこれらの警告をきれいに抑制するにはどうすればよいですか?

4

3 に答える 3

15

コードでこれらの警告をきれいに抑制する方法

不適切な代入に代わるものは、次の#pragmaとおりです。

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

それは機能するはずであり、それを文書化することが理にかなっている正確な場所、つまりフィールド宣言で醜さを保ちます。

複数のフィールドを同じ方法で処理する場合は、それらすべてに適用可能なコメントを付けて、無効化された警告の同じ「ブロック」にそれらすべてを配置できます。

もちろん、これを「クリーン」と見なすかどうかは好みの問題です。警告を削除するという副作用のためだけに存在する割り当てよりも、それを好むと思います。

于 2013-02-08T08:33:44.180 に答える
7

すべてのプラットフォームがCallerMemberNameAttributeReactiveUI をサポートするようになったので、Obsessive Compulsive Compiler の抑圧に苦しむ必要はありません。

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 に答える