Na przykład otrzymuję to ostrzeżenie kompilatora,
Zdarzenie „Company.SomeControl.SearchClick” nigdy nie jest używane.
Ale wiem, że jest używany, ponieważ komentowanie go wyrzuca mnie jak 20 nowych ostrzeżeń o stronach XAML, które próbują użyć tego zdarzenia!
Co daje? Czy jest jakiś sposób, aby pozbyć się tego ostrzeżenia?
Odpowiedzi:
Wydaje się, że jest to ostrzeżenie 67 i dlatego można je zlikwidować za pomocą:
#pragma warning disable 67
Nie zapomnij przywrócić go tak szybko, jak to możliwe (po deklaracji zdarzenia) za pomocą:
#pragma warning restore 67
Jednak chciałbym jeszcze raz sprawdzić i upewnić się, że podnoszenie się gdzieś zdarzeń, nie tylko zapisanie do niego. Fakt, że kompilator wypluwa 20 ostrzeżeń, a nie 20 błędów, gdy komentujesz wydarzenie, jest również podejrzany ...
Jest też interesujący artykuł na temat tego ostrzeżenia, a konkretnie jego zastosowania do interfejsów; jest dobra sugestia, jak radzić sobie z „niewykorzystanymi” zdarzeniami. Ważne części to:
źródło
Jeśli jesteś zmuszony zaimplementować zdarzenie z interfejsu, którego implementacja nie potrzebuje, możesz wykonać następujące czynności, aby uniknąć ostrzeżenia.
public event EventHandler CanExecuteChanged { add{} remove{} }
źródło
if(OnCompleteOpenEvent != null) OnCompleteOpenEvent();
, zostanie napisane, że „OnCompleteEvent nie istnieje w bieżącym kontekście”.Drugim najlepszym sposobem jest imho, aby jasno stwierdzić, że wydarzenie nie jest obsługiwane przez wyrzucanie wyjątku, jeśli ktoś spróbuje je zasubskrybować.
public event RoutedEventHandler SearchClick { add { throw new NotSupportedException(); } remove { throw new NotSupportedException(); } }
W ramach wariantu możesz również pozostawić metody
add
iremove
puste, aby po cichu zignorować subskrypcje zdarzenia.Najlepszym rozwiązaniem jest refaktoryzacja kodu, być może ściągnięcie deklaracji zdarzenia do implementatora, jeśli to możliwe.
W ostateczności możesz również wyłączyć takie ostrzeżenie
#pragma warning disable 67 public event RoutedEventHandler SearchClick; #pragma warning restore 67
źródło
Możesz też wykonać następujące czynności:
public event EventHandler MyEvent = delegate {}
źródło
Kompilator najwyraźniej nie wie, że jest używany w kodzie XAML. Spróbuj pominąć ostrzeżenie w definicji zdarzenia.
Upewnij się też, że faktycznie gdzieś podnosisz wydarzenie.
źródło
Możesz wyłączyć 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 przypisywanych, ale nieużywanych zmiennych. Możesz użyć flagi / nowarn: 0219 lub dodać numer błędu w panelu właściwości projektu (w sekcji „Build” pamiętaj o usunięciu wiodącego CS). Należy pamiętać, że wszystkie ostrzeżenia tej klasy są pomijane .
źródło
Lub możesz dodać
<NoWarn>67</NoWarn>
do swojego projektu<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> ... <NoWarn>67</NoWarn> </PropertyGroup>
źródło