102

たとえば、次のコンパイラ警告が表示されます。

イベント「Company.SomeControl.SearchClick」は使用されません。

しかし、コメントアウトすると、このイベントを使用しようとしている XAML ページに関する 20 個の新しい警告が表示されるため、使用されていることはわかっています。

何を与える?この警告を取り除くためのトリックはありますか?

4

7 に答える 7

167

これは警告 67のように見えるため、次の方法で抑制することができます。

#pragma warning disable 67

次のようにして、できるだけ早く (イベント宣言後) 復元することを忘れないでください。

#pragma warning restore 67

ただし、もう一度チェックして、イベントをサブスクライブするだけでなく、どこかでイベントを開催していることを確認します. イベントをコメントアウトすると、コンパイラが20個のエラーではなく20個の警告を吐き出すという事実も疑わしいです...

この警告と、具体的にはそれがインターフェイスにどのように適用されるかについての興味深い記事もあります。「未使用」のイベントを処理する方法について、良い提案があります。重要な部分は次のとおりです。

正しい答えは、イベントから何を期待するかを明確にすることです。この場合、それは何もありません。

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

これにより、警告だけでなく、通常のイベントの追加のコンパイラ生成実装も完全に抑制されます。もう 1 つの追加の利点として、この何もしない実装が本当に最適な実装であるかどうかを考えるよう促されます。たとえば、イベントがサポートされていないほど重要ではない場合、その機能に依存しているクライアントがそれなしでは失敗する可能性が高い場合、サポートの欠如を明示的に示し、例外:

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

もちろん、機能の一部がなくても便利に実装できるインターフェイスは、そのインターフェイスが最適にまとまっておらず、別のインターフェイスに分割する必要があることを示している場合があります。

于 2009-07-07T16:23:32.517 に答える
85

インターフェイスからイベントを実装することを余儀なくされた場合、実装が必要ない場合は、警告を回避するために次のことを行うことができます。

public event EventHandler CanExecuteChanged { add{} remove{} }
于 2010-09-09T08:50:57.673 に答える
19

2番目に良い方法は、誰かがイベントにサブスクライブしようとした場合に例外をスローすることにより、イベントがサポートされていないことを明確に示すことです。

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
于 2013-12-03T13:07:29.090 に答える
1

コンパイラは、XAML コードで使用されていることを認識していないようです。イベント定義で警告を抑制してみてください。

また、実際にどこかでイベントを発生させていることを確認してください。

于 2009-07-07T16:22:17.340 に答える
1

<NoWarn>67</NoWarn>または、プロジェクトに追加できます

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <NoWarn>67</NoWarn>
</PropertyGroup>
于 2013-11-05T04:52:55.150 に答える
1

個々の警告を抑制することができます。

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

この場合、CS0219 は、割り当てられているが使用されていない変数に関する警告です。/nowarn:0219 フラグを使用するか、プロジェクトのプロパティ ペインにエラー番号を追加できます ([ビルド] の下で、先頭の CS を忘れずに削除してください)。は、このクラスのすべての警告を抑制することに注意してください。

于 2009-07-07T16:23:25.527 に答える