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?
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.
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{} }
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
Vous pouvez également effectuer les opérations suivantes:
public event EventHandler MyEvent = delegate {}
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.
Ou vous pouvez ajouter <NoWarn>67</NoWarn>
à votre projet
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
<NoWarn>67</NoWarn>
</PropertyGroup>
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.