2009-07-07 13 views
60

Per esempio, ottengo questo avvertimento del compilatore, "Come faccio a sbarazzarmi degli avvisi del compilatore "[qualche evento] mai usato" in Visual Studio?

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

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

ciò che dà? c'è un trucco per sbarazzarsi di questo avviso?

+1

Potete per favore inviare un esempio? –

risposta

95

Questo sembra essere warning 67 e può quindi essere soppressa con:

#pragma warning disable 67 

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

#pragma warning restore 67 

Tuttavia, controllerei di nuovo e assicurarmi che tu sia sollevando l'evento da qualche parte, non semplicemente abbonandomi allo ad esso. Il fatto che il compilatore sputa fuori 20 avvertimenti e non 20 errori quando commentare l'evento è anche sospetto ...

C'è anche an interesting article su questo avvertimento e in particolare come si applica a interfacce; c'è un buon suggerimento su come gestire gli eventi "non usati".

+0

Questo è esattamente ciò di cui ho bisogno! Grazie! L'unica differenza è che ho aggiunto il mio commento accanto al 67 quindi sapevo cosa sarebbe stato in futuro. Ecco "esattamente" cosa ho digitato ... #pragma disable disable 67 // evento mai usato evento pubblico RoutedEventHandler SearchClick; #pragma warning restore 67 – jedmao

+10

Questo è un ottimo collegamento. Grazie. –

+0

Questo è utile; non andando a posto, ma solo per avere un'idea corrente in esecuzione ... – dudeNumber4

1

Il compilatore è a quanto pare non consapevoli del fatto che è in fase di usato nel codice XAML. Prova a sopprimere l'avviso nella tua definizione dell'evento.

Inoltre, assicurati di sollevare l'evento da qualche parte.

+0

Questo è quello che ho pensato anch'io, quindi ho spostato il codice XAML sul codice e ha mostrato lo stesso avviso! E sì, sono sicuro al 100% che l'evento sia stato sollevato da qualche parte. Sto guardando proprio a questo. È collegato a un pulsante. – jedmao

0

È possibile sopprimere singoli avvertimenti.

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

In questo caso, CS0219 è l'avviso relativo alle variabili assegnate ma non utilizzate. È possibile utilizzare il flag/nowarn: 0219 o aggiungere il numero di errore nel riquadro delle proprietà per il progetto (in "Build", ricordarsi di rimuovere il CS iniziale). Ricordare le avvertenze tutte le avvertenze di questa classe.

+0

Buono a sapersi! Grazie :) – jedmao

57

Se si è costretti a implementare un evento da un'interfaccia, che l'implementazione non è necessaria, è possibile eseguire quanto segue per evitare l'avviso.

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

+1 Grandi informazioni, grazie! –

+0

Se lo faccio, in seguito nel file si dice 'if (OnCompleteOpenEvent! = Null) OnCompleteOpenEvent();' che "OnCompleteEvent non esiste nel contesto corrente". – Almo

+0

@ Almo, è corretto. Tuttavia, stai descrivendo il caso in cui STAI utilizzando l'evento e quindi l'avviso non verrà visualizzato in modo da non utilizzare la correzione per l'avviso. Destra? In genere hai un'interfaccia che specifica l'evento e due sottoclassi. Uno non usa l'evento e usa questa soluzione. L'altro usa l'evento e non ha mai lanciato l'avviso per cominciare. –

1

Oppure è possibile aggiungere <NoWarn>67</NoWarn> al progetto

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

disabiliterà l'avviso nell'intero progetto nascondendo potenzialmente problemi reali con eventi inutilizzati. – vidstige

12

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

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

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

La soluzione migliore consiste nel rifattorizzare il codice, eventualmente portare la dichiarazione dell'evento sull'attore, 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 
Problemi correlati