どのように私は取り除くか、「使ったことがない[いくつかのイベント]」Visual Studioでコンパイラの警告を?
-
11-09-2019 - |
質問
たとえば、私はこのコンパイラの警告を取得し、
イベント 'Company.SomeControl.SearchClick' が使用されることはありません。
しかし、私はそれをコメントアウトすると、このイベントを使用しようとしているXAMLページの20回の新しい警告のように私をスローするので、それが使われていることを知っている!
何ができますか?この警告を取り除くためのトリックはありますか?
解決
これは 67 に警告されるようにし、これを抑制することが可能と表示されます:
#pragma warning disable 67
で(イベント宣言の後に)できるだけ早くそれを復元することを忘れないでください。
#pragma warning restore 67
<時間>
しかし、私は再びチェックして、の引き上げのイベントのどこかではなく、のはちょうどそれにの加入あなたがしていることを確認してくださいと思います。コンパイラは、20 の警告を出してくれるという事実のといない20 のエラーのイベントをコメントアウトするときでも、不審な...
もあります<のhref = "http://blogs.msdn.com/trevor/archive/2008/08/14/c-warning-cs0067-the-event-event-is-never-used.aspx" REL =「noreferrer」>この警告とについての興味深い記事で具体的には、インターフェイスに適用されますか。 「未使用」のイベントに対処する方法について良い提案があります。 (?一時的に)残念ながら、このリンクは死んで、今のようですが、重要な部分があります:
正しい答えは、あなたがこのような場合には、何もない場合、期待するかについて明確にすることです
public event EventHandler Unimportant { add { } remove { } }
これはきれいに警告だけでなく、通常のイベントの追加のコンパイラで生成された実装を抑制します。そして、別の追加特典として、それは1つが、この、何も行わない実装は、本当に最高の実装であるかどうかを考えるように求められます。例えば、イベントはあまり重要ではない、それはサポートされていないとして、機能性に依存していないクライアントは、それなしで失敗する可能性があり、それが明示的にサポートの欠如を示し、投げることによって高速に失敗する方がよいかもしれないようではない場合例外:
public event EventHandler Unsupported { add { throw new NotSupportedException(); } remove { } }
もちろん、有効にその機能の一部なしで実施することができるインタフェースは、時々インターフェイスが最適粘着性ではなく、別のインターフェースに分割されるべきであることを示している。
他のヒント
あなたがインターフェイスからイベントを実装することを余儀なくされている場合は、あなたの実装が警告を避けるために、次の操作を行うことができます必要がないこと。
public event EventHandler CanExecuteChanged { add{} remove{} }
第二の最良の方法は明らかにイベントは、誰かがそれに加入しようとした場合に例外をスローすることによってサポートされていないことを述べることは私見です。
public event RoutedEventHandler SearchClick
{
add { throw new NotSupportedException(); }
remove { }
}
この上のバリエーションとして、あなたも黙ってイベントにサブスクリプションを無視し、空add
とremove
方法を残すことができます。
最善の解決策は、可能な場合に実装するイベントの宣言を引っ張るおそらくコードをリファクタリングすることである。
最後の手段として、あなたもそう
のような警告を無効にすることができます#pragma warning disable 67
public event RoutedEventHandler SearchClick;
#pragma warning restore 67
また、次の操作を行うことができます:
public event EventHandler MyEvent = delegate {}
コンパイラはそれがXAMLコードで使われていることを明らかに認識しません。あなたのイベント定義に警告を抑制してみます。
また、あなたが実際にどこかでイベントを上げていることを確認してください。
あなたは、個々の警告をSUPRESSすることができます。
\Program.cs(13,20): warning CS0219: The variable 'foo' is assigned but its value is never used
この場合、CS0219は、割り当てられたが、使用しないれている変数に関する警告です。 (「ビルド」の下で、大手CSを削除することを忘れないでください)プロジェクトのためにペイン0219のフラグを、またはプロパティにエラー番号を追加します:あなたは/ NOWARNを使用することができます。このクラスのすべてのの警告supressesはを心に留めておいてください。
それとも、あなたのプロジェクトに<NoWarn>67</NoWarn>
を追加することができます。
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
<NoWarn>67</NoWarn>
</PropertyGroup>