2009-07-07 9 views
60

Na przykład, mam to ostrzeżenie kompilatora "Jak pozbyć się "[niektóre zdarzenie] nigdy nie używane" ostrzeżenia kompilatora w Visual Studio?

Zdarzenie«Company.SomeControl.SearchClick»nigdy nie jest używany.

Ale wiem, że jest on wykorzystywany, ponieważ komentując ją wyrzuca mnie jak 20 nowych ostrzeżeń stron XAML, które starają się wykorzystać to wydarzenie!

Co daje? Czy jest jakiś podstęp, aby pozbyć się tego ostrzeżenia?

+1

Czy możesz zakładać przykład? –

Odpowiedz

95

To wydaje się być warning 67 a zatem mogą być tłumione z:

#pragma warning disable 67 

Nie zapomnij go przywrócić jak najszybciej (po zgłoszeniu zdarzenia) z:

#pragma warning restore 67 

Jednakże, sprawdziłbym ponownie i upewniam się, że jesteś gdzieś się wydarzyło, a nie po prostu subskrybując do tego. Fakt, że kompilator wypluwa 20 ostrzeżenia a nie 20 błędy kiedy Wykomentuj zdarzenie jest również podejrzany ...

Jest też an interesting article o tym ostrzeżeniem, a konkretnie w jaki sposób odnosi się do interfejsów; jest dobra sugestia, jak radzić sobie z "nieużywanymi" wydarzeniami.

+0

Dokładnie tego potrzebuję! Dziękuję Ci! Jedyną różnicą jest to, że dodałem własny komentarz obok 67, więc wiedziałem, co to jest w przyszłości. Oto "dokładnie" to, co wpisałem ... # ostrzeżenie o wyłączeniu komunikatu 67 // wydarzenie nigdy nie używane wydarzenie publiczne RoutedEventHandler SearchClick; #pragma warning restore 67 – jedmao

+10

To świetny link. Dzięki. –

+0

Jest to użyteczne; nie będzie się utrzymywał, ale po prostu coś, aby uzyskać bieżący pomysł ... – dudeNumber4

1

kompilator najwyraźniej nie świadomość, że to jest stosowane w kodzie XAML. Spróbuj ukryć ostrzeżenie w definicji zdarzenia.

Upewnij się też, że gdzieś jesteś.

+0

Tak też myślałem, więc przeniosłem kod XAML do kodu i pokazało to samo ostrzeżenie! I tak, jestem w 100% pewien, że impreza jest gdzieś podnoszona. Patrzę na to. Jest podłączony do przycisku. – jedmao

0

Można pominąć poszczególne ostrzeżenia.

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

W tym przypadku CS0219 jest ostrzeżeniem dotyczącym przypisywania zmiennych, ale nieużywanych. Możesz użyć flagi/nowarn: 0219 lub dodać numer błędu w okienku właściwości projektu (pod "Build", pamiętaj o usunięciu wiodącego CS). Należy pamiętać o ostrzeżeniach o tej klasie.

+0

Dobrze wiedzieć! Dzięki :) – jedmao

57

Jeśli zostaniesz zmuszony do implementacji zdarzenia z poziomu interfejsu, którego implementacja nie będzie potrzebna, możesz wykonać następujące czynności, aby uniknąć ostrzeżenia.

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

+1 Świetne informacje, dzięki! –

+0

Jeśli to zrobię, to w dalszej części pliku, gdzie robię 'if (OnCompleteOpenEvent! = Null) OnCompleteOpenEvent();', że "OnCompleteEvent nie istnieje w bieżącym kontekście". – Almo

+0

@Almo, zgadza się. Jednak opisujesz przypadek, w którym używasz zdarzenia, więc ostrzeżenie nie pojawi się, abyś nie używał poprawki ostrzeżenia. Dobrze? Zazwyczaj masz interfejs określający zdarzenie i dwie podklasy. Nie korzysta się z tego wydarzenia i korzysta z tego rozwiązania. Drugi korzysta z wydarzenia i nigdy nie rzucił ostrzeżenia na początek. –

1

Albo można dodać <NoWarn>67</NoWarn> do projektu

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

spowoduje to wyłączenie ostrzeżenia w całym projekcie, potencjalnie ukrywając prawdziwe problemy z nieużywanymi zdarzeniami. – vidstige

12

Drugim najlepszym sposobem jest imho jednoznacznie stwierdzić, że zdarzenie nie jest obsługiwane przez rzuca wyjątek, jeśli ktoś próbuje się do niej zapisać.

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

Jako wariant ten można też po prostu zostawić add i remove metod pustych dyskretnie ignorować zapisy na imprezy.

Najlepszym rozwiązaniem jest refaktoryzacja kodu, może wyciągnąć deklarację zdarzenia do wykonawcy, jeśli to możliwe.

W ostateczności można również wyłączyć ostrzeżenie, podobnie jak

#pragma warning disable 67 
public event RoutedEventHandler SearchClick; 
#pragma warning restore 67 
Powiązane problemy