web-dev-qa-db-fra.com

Comment puis-je me débarrasser des avertissements du compilateur «[un événement] jamais utilisé» dans Visual Studio?

Par exemple, je reçois cet avertissement du compilateur,

L'événement "Company.SomeControl.SearchClick" n'est jamais utilisé.

Mais je sais qu'il est utilisé car le commenter me lance comme 20 nouveaux avertissements de pages XAML qui essaient d'utiliser cet événement!

Ce qui donne? Y a-t-il une astuce pour se débarrasser de cet avertissement?

88
jedmao

Cela semble être avertissement 67 et peut donc être supprimé avec:

#pragma warning disable 67

N'oubliez pas de le restaurer le plus tôt possible (après la déclaration de l'événement) avec:

#pragma warning restore 67

Cependant, je vérifierais à nouveau et m'assurerais que vous déclenchez l'événement quelque part, pas simplement en vous abonnant . Le fait que le compilateur crache 20 avertissements et non 20 erreurs lorsque vous commentez l'événement est également suspect ...

Il y a aussi n article intéressant à propos de cet avertissement et spécifiquement comment il s'applique aux interfaces; il y a une bonne suggestion sur la façon de gérer les événements "inutilisés". Malheureusement, ce lien semble être (temporairement?) Mort maintenant, mais les parties importantes sont:

La bonne réponse est d'être explicite sur ce que vous attendez de l'événement, qui dans ce cas, n'est rien:

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

Cela supprimera proprement l'avertissement, ainsi que l'implémentation supplémentaire générée par le compilateur d'un événement normal. Et comme autre avantage supplémentaire, cela incite à se demander si cette implémentation de ne rien faire est vraiment la meilleure implémentation. Par exemple, si l'événement n'est pas aussi important qu'il n'est pas pris en charge, de sorte que les clients qui dépendent de la fonctionnalité sont susceptibles d'échouer sans elle, il peut être préférable d'indiquer explicitement le manque de support et d'échouer rapidement en lançant un exception:

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

Bien sûr, une interface qui peut être utilement implémentée sans certaines parties de ses fonctionnalités est parfois une indication que l'interface n'est pas cohésive de manière optimale et doit être divisée en interfaces distinctes.

133
lc.

Si vous êtes obligé d'implémenter un événement à partir d'une interface, que votre implémentation n'a pas besoin, vous pouvez procéder comme suit pour éviter l'avertissement.

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

La deuxième meilleure façon est à mon humble avis de déclarer clairement que l'événement n'est pas pris en charge en lançant une exception si quelqu'un essaie de s'y abonner.

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

En variante, vous pouvez également laisser les méthodes add et remove vides pour ignorer silencieusement les abonnements à l'événement.

La meilleure solution est de refactoriser le code, peut-être de tirer la déclaration de l'événement vers l'implémenteur si possible.

En dernier recours, vous pouvez également désactiver l'avertissement comme ceci

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

Vous pouvez également effectuer les opérations suivantes:

public event EventHandler MyEvent = delegate {}
2
GrantA

Le compilateur n'est apparemment pas conscient qu'il est utilisé dans le code XAML. Essayez de supprimer l'avertissement dans votre définition d'événement.

Assurez-vous également que vous organisez l'événement quelque part.

1
SLaks

Ou vous pouvez ajouter <NoWarn>67</NoWarn> à votre projet

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

Vous pouvez supprimer les avertissements individuels.

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

Dans ce cas, CS0219 est l'avertissement concernant les variables attribuées mais non utilisées. Vous pouvez soit utiliser l'indicateur/nowarn: 0219, soit ajouter le numéro d'erreur dans le volet des propriétés du projet (sous "Build", n'oubliez pas de supprimer le CS principal). Gardez à l'esprit les suppressions toutes les avertissements de cette classe.

1
Svend