簡體   English   中英

如何擺脫 Visual Studio 中“[某些事件] 從未使用過”的編譯器警告?

[英]How do I get rid of “[some event] never used” compiler warnings in Visual Studio?

例如,我收到此編譯器警告,

從不使用事件“Company.SomeControl.SearchClick”。

但我知道它被使用了,因為將它注釋掉會讓我像 20 個試圖使用此事件的 XAML 頁面的新警告一樣!

是什么賦予了? 有沒有辦法擺脫這個警告?

這似乎是警告 67 ,因此可以通過以下方式進行抑制:

#pragma warning disable 67

不要忘記盡快(在事件聲明之后)恢復它:

#pragma warning restore 67

但是,我會再次檢查並確保您在某個地方提出該事件,而不僅僅是訂閱它。 當您注釋掉事件時,編譯器會吐出 20 個警告而不是 20 個錯誤這一事實也很可疑……

還有一篇關於此警告的有趣文章,特別是它如何應用於接口; 關於如何處理“未使用”事件有一個很好的建議。 重要的部分是:

正確的答案是明確您對事件的期望,在這種情況下,什么都不是:

 public event EventHandler Unimportant { add { } remove { } }

這將完全抑制警告,以及正常事件的額外編譯器生成實現。 作為另一個額外的好處,它促使人們思考這種無所作為的實現是否真的是最好的實現。 例如,如果事件不是不重要而是不受支持,以至於確實依賴該功能的客戶端可能會在沒有它的情況下失敗,那么最好通過拋出例外:

 public event EventHandler Unsupported { add { throw new NotSupportedException(); } remove { } }

當然,一個可以在沒有其某些部分功能的情況下有效實現的接口有時表明該接口不是最佳內聚的,應該拆分為單獨的接口。

如果您被迫從接口實現事件,您的實現不需要您可以執行以下操作以避免警告。

public event EventHandler CanExecuteChanged { add{} remove{} }

第二個最好的方法是恕我直言,如果有人試圖訂閱它,則通過拋出異常來明確說明該事件不受支持。

public event RoutedEventHandler SearchClick
{
    add { throw new NotSupportedException(); }
    remove { throw new NotSupportedException(); }
}

作為對此的一種變體,您還可以將addremove方法留空以靜默忽略事件的訂閱。

最好的解決方案是重構代碼,如果可能的話,也許將事件的聲明拉到實現者那里。

作為最后的手段,您還可以像這樣禁用警告

#pragma warning disable 67
public event RoutedEventHandler SearchClick;
#pragma warning restore 67

您還可以執行以下操作:

public event EventHandler MyEvent = delegate {}

編譯器顯然不知道它正在 XAML 代碼中使用。 嘗試取消事件定義中的警告。

另外,請確保您實際上是在某處引發事件。

您可以抑制個別警告。

\Program.cs(13,20): warning CS0219: The variable 'foo' is assigned but its value is never used

在這種情況下,CS0219 是有關已分配但未使用的變量的警告。 您可以使用 /nowarn:0219 標志,或在項目的屬性窗格中添加錯誤編號(在“Build”下,記得刪除前導 CS)。 請記住,該類會抑制所有警告。

或者您可以將<NoWarn>67</NoWarn>到您的項目中

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <NoWarn>67</NoWarn>
</PropertyGroup>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM