web-dev-qa-db-ja.com

Visual Studioで "[一部のイベント]使用されていません"コンパイラの警告を取り除くにはどうすればよいですか?

たとえば、私はこのコンパイラ警告を受け取ります、

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

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

何ができますか?この警告を取り除くトリックはありますか?

88
jedmao

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

#pragma warning disable 67

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

#pragma warning restore 67

ただし、もう一度確認して、イベントを発生させているイベントをサブスクライブそれに。コンパイラが次の場合に20warningsではなく20errorsを出力するという事実あなたはイベントをコメントアウトしても疑わしいです...

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

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

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

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

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

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

133
lc.

インターフェースからイベントを実装する必要がある場合は、実装が不要であるため、警告を回避するために以下を実行できます。

public event EventHandler CanExecuteChanged { add{} remove{} }
76
Adam Mills

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

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

これのバリエーションとして、addメソッドとremoveメソッドを空のままにして、イベントのサブスクリプションを暗黙的に無視することもできます。

最善の解決策は、可能であればコードをリファクタリングして、イベントの宣言を実装者にプルすることです。

最後の手段として、このように警告を無効にすることもできます

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

次のこともできます。

public event EventHandler MyEvent = delegate {}
2
GrantA

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

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

1
SLaks

または、<NoWarn>67</NoWarn>プロジェクトに

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

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

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

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

1
Svend