14

我有以下代碼:禁止 「會員從未分配到」 警告在C#

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

使用ReactiveUI INPC支持。編譯器總是警告我Trochoid永遠不會被分配,並且將始終爲空。但是,由於RaiseAndSetIfChanged通過CallerMemberName支持執行的魔術,代碼確實有效,編譯器也是錯誤的。

如何乾淨抑制在我的代碼,這些警告?

回答

15

如何乾淨抑制這些警告在我的代碼

爲不適當分配的替代將是隻是一個#pragma

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

這應該起作用,它將醜陋性保留在正確的地方,在現場聲明中記錄它是有意義的。

如果以同樣的方式處理多個字段,你可以把他們都在禁用警告相同的「塊」,適用於所有的人的意見。

不管你認爲這是「清潔」與否當然是口味的問題。我認爲我更喜歡將它分配給副作用去除警告的分配。

+0

儘管默認分配是您無論如何都可以做的事情。無論哪種方式,我們現在都說「我們知道這沒什麼」。其中,我喜歡分組因素。但是,我是誰... –

+0

我更喜歡這樣做,因爲它也會阻止開發人員(也許誰正在使用resharper或類似工具)假設該字段可以只讀。 – weston

+0

我可以使用SuppressMessageAttribute http://msdn.microsoft.com/en-us/library/system.diagnostics.codeanalysis.suppressmessageattribute%28v=vs.100%29.aspx但我無法弄清楚如何產生極其從編譯器警告詳細attr? – bradgonesurfing

4

你可以將其分配爲引用類型默認:

ViewPortViewModel _Trochoid = null; 
+0

這工作,但我覆蓋在構造函數中值覺得不妥。 – bradgonesurfing

+1

如果你有一個像resharper這樣的工具,這樣做會讓它告訴你這個字段可以只讀,並且你仍然需要發表評論來抑制它。 – weston

6

現在,每個平臺在ReactiveUI CallerMemberNameAttribute的支持,就沒有必要忍受你的強迫編譯器的壓迫:

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

其他重載現在實際上是不必要的,但我離開他們,因爲除去它們是一個重大更改,因此不會做,直到ReactiveUI 5.0

+0

OP已經使用CallerMemberNameAttribute - 並通過反射設置值:「但是由於RaiseAndSetIfChanged通過CallerMemberName執行的魔術」 - 我假設他們不想改變他們如何使用'RaiseAndSetIfChanged' 。 –

+0

如果使用Ref超載,它不會做反射:) –

+0

+免費性能提升 –