Frage

Zum Beispiel bekomme ich diese Compiler-Warnung,

  

Das Ereignis 'Company.SomeControl.SearchClick' wird nie verwendet.

Aber ich weiß, dass es verwendet wird, weil es auszukommen wirft mich wie 20 neue Warnungen von XAML-Seiten, die dieses Ereignis zu verwenden versuchen!

Was soll das? Gibt es einen Trick dieser Warnung loswerden?

War es hilfreich?

Lösung

Dies scheint zu 67 Warnung und kann so mit unterdrückt werden :

#pragma warning disable 67

Vergessen Sie nicht, es so schnell wie möglich wieder herzustellen (nach der Veranstaltung Erklärung) mit:

#pragma warning restore 67

Allerdings würde ich noch einmal überprüfen und stellen Sie sicher, dass Sie Anhebung das Ereignis irgendwo, nicht nur abonnieren zu. Die Tatsache, dass der Compiler spuckt 20 Warnungen und nicht mehr als 20 Fehler , wenn Sie die Veranstaltung kommentieren Sie ist auch verdächtig ...

Es gibt auch ein interessanter Artikel über diese Warnung und speziell, wie es Schnittstellen gilt; es gibt einen guten Vorschlag, wie mit „ungenutzt“ Ereignissen zu behandeln. Leider scheint diese Verbindung tot zu sein jetzt, aber die wichtigen Teile sind (vorübergehend?):

  

Die richtige Antwort ist explizit zu sein über das, was Sie von der Veranstaltung erwarten, die in diesem Fall nichts ist:

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

Dies wird die Warnung sauber unterdrücken, sowie die zusätzliche Compiler generierten Implementierung eines normalen Ereignisses. Und wie ein anderer zusätzlicher Vorteil, fordert es ein, darüber nachzudenken, ob diese do-nothing Umsetzung ist wirklich die beste Umsetzung. Zum Beispiel, wenn das Ereignis nicht so sehr unwichtig, da er nicht unterstützt wird, so dass Kunden, die auf der Funktionalität verlassen Sie sich wahrscheinlich ohne es scheitern, könnte es besser sein, um anzuzeigen, explizit den Mangel an Unterstützung und nicht schnell durch einen Wurf Ausnahme:

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

Natürlich eine Schnittstelle, die ohne einige Teile ihrer Funktionalität sinnvoll umgesetzt werden kann, ist manchmal ein Hinweis darauf, dass die Schnittstelle nicht optimal zusammenhängende und soll in separate Schnittstellen aufgeteilt werden.

Andere Tipps

Wenn Sie gezwungen sind, ein Ereignis von einer Schnittstelle zu implementieren, dass Ihre Implementierung muss nicht die Warnung folgenden vermeiden tun können.

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

Der zweitbeste Weg ist imho deutlich zu sagen, dass das Ereignis nicht durch Auslösen einer Ausnahme wird unterstützt, wenn jemand sie zu abonnieren versucht.

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

Als eine Variante dieses können Sie auch lassen Sie die add und remove Methoden leer leise Abonnements auf das Ereignis zu ignorieren.

Die beste Lösung ist der Code vielleicht ziehen Sie die Erklärung des Ereignisses auf die Implementierer möglichst Refactoring.

Als letztes Mittel auch die Warnung wie so deaktivieren

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

Sie können auch wie folgt vorgehen:

public event EventHandler MyEvent = delegate {}

Der Compiler ist offenbar nicht bewusst, dass es in XAML-Code verwendet werden wird. Versuchen Sie, die Warnung in der Event-Definition unterdrückt wird.

Also, stellen Sie sicher, dass Sie das Ereignis tatsächlich erhöhen irgendwo.

Sie können einzelne Warnungen unterdrücken.

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

In diesem Fall ist CS0219 die Warnung in Bezug auf Variablen zugewiesen werden aber nicht verwendet. 0219 Flags oder die Fehlernummer hinzufügen in den Eigenschaften für das Projektfenster (unter „Build“, denken Sie daran, die führende CS zu entfernen): Sie können entweder die Option / nowarn verwenden. Denken Sie daran, die Unterdrückt alle Warnungen dieser Klasse.

Sie können auch <NoWarn>67</NoWarn> zu Ihrem Projekt hinzufügen

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <NoWarn>67</NoWarn>
</PropertyGroup>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top