Come faccio a sbarazzarsi di “[qualche evento] mai usato” avvisi del compilatore in Visual Studio?

StackOverflow https://stackoverflow.com/questions/1093315

Domanda

Per esempio, ottengo questo avviso del compilatore,

  

L'evento 'Company.SomeControl.SearchClick' non viene mai utilizzato.

Ma so che è usato perché commentando fuori mi butta come 20 nuove avvertenze di pagine XAML che stanno cercando di utilizzare questo evento!

Che cosa dà? C'è un trucco per sbarazzarsi di questo avviso?

È stato utile?

Soluzione

Questo sembra essere avvertimento 67 e può quindi essere soppresso con :

#pragma warning disable 67

Non dimenticate di ripristinare al più presto possibile (dopo la dichiarazione di evento) con:

#pragma warning restore 67

Tuttavia, mi piacerebbe verificare di nuovo e assicurarsi che si sta alzando l'evento da qualche parte, non solo l'iscrizione ad esso. Il fatto che il compilatore sputa fuori 20 avvertenze e non 20 errori quando si commento l'evento è anche sospetto ...

C'è anche un interessante articolo su questo avviso e in particolare come si applica a interfacce; c'è un buon suggerimento su come trattare con eventi "inutilizzati". Purtroppo questo link sembra essere morto, ma le parti più importanti sono (temporaneamente?):

  

La risposta giusta è quella di essere espliciti su cosa vi aspettate dalla manifestazione, che in questo caso, non è altro:

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

Questo modo pulito eliminare l'avviso, così come la realizzazione in più generato dal compilatore di un evento normale. E come un altro vantaggio, viene richiesto a pensare sul fatto che questa implementazione do-nothing è davvero il migliore attuazione. Per esempio, se l'evento non è tanto poco importante in quanto è supportato, in modo tale che i client che si basano sulla funzionalità rischiano di fallire senza di essa, potrebbe essere meglio per indicare esplicitamente la mancanza di supporto e non riescono veloce lanciando una eccezione:

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

Naturalmente, un'interfaccia che può essere utilmente implementata senza alcune parti della sua funzionalità è talvolta un'indicazione che l'interfaccia non è ottimale coesivo e dovrebbe essere suddiviso in interfacce separate.

Altri suggerimenti

Se si è costretti a implementare un evento da un'interfaccia, che l'implementazione non ha bisogno è possibile effettuare le seguenti operazioni per evitare l'avvertimento.

public event EventHandler CanExecuteChanged { add{} remove{} }

Il modo migliore è secondo imho affermare chiaramente che l'evento non è supportato da un'eccezione se qualcuno cerca di iscriversi ad esso.

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

Come variante su questo si può anche semplicemente lasciare le add e remove metodi vuoti di ignorare silenziosamente abbonamenti sull'evento.

La soluzione migliore è quella di refactoring del codice, forse tirare la dichiarazione della manifestazione per l'implementor se possibile.

Come ultima risorsa è possibile anche disattivare l'avviso in questo modo

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

È inoltre possibile effettuare le seguenti operazioni:

public event EventHandler MyEvent = delegate {}

Il compilatore non è a quanto pare consapevole del fatto che è in uso nel codice XAML. Provare a sopprimere l'avviso nella definizione degli eventi.

Inoltre, assicurarsi che si sta effettivamente aumentando l'evento da qualche parte.

È possibile disattivare i singoli avvisi.

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

In questo caso, CS0219 è l'avvertimento variabili relative essere assegnati ma non utilizzati. È possibile utilizzare la / nowarn: 0219 bandiera, o aggiungere il numero di errore nel riquadro Proprietà per il progetto (sotto "Build", ricordatevi di rimuovere il CS principale). Tenete a mente il sopprime i tutti avvertimenti di questa classe.

In alternativa, è possibile aggiungere <NoWarn>67</NoWarn> al progetto

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <NoWarn>67</NoWarn>
</PropertyGroup>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top