C #: 'ist' Keyword und prüft auf Nicht
Dies ist eine dumme Frage, aber Sie können diesen code verwenden, um zu überprüfen, ob etwas einen bestimmten Typ...
if (child is IContainer) { //....
Gibt es eine elegantere Möglichkeit zu prüfen, für die "NICHT" - Instanz?
if (!(child is IContainer)) { //A little ugly... silly, yes I know...
//these don't work :)
if (child !is IContainer) {
if (child isnt IContainer) {
if (child aint IContainer) {
if (child isnotafreaking IContainer) {
Ja, ja... dumme Frage....
Denn es gibt einige Frage auf das, was der code aussieht, es ist einfach eine Rückkehr an den Anfang einer Methode.
public void Update(DocumentPart part) {
part.Update();
if (!(DocumentPart is IContainer)) { return; }
foreach(DocumentPart child in ((IContainer)part).Children) {
//...etc...
Kommentar zu dem Problem
Ich persönlich mag das "Kind isnotafreaking ...". Ich bin Stimmabgabe zu haben, dass das Schlüsselwort in C# 5
Ich bin daran interessiert zu wissen, die situation, die Sie verwenden würden? Was bedeutet der "else" - Teil dieser code Aussehen und kann man nicht einfach umkehren? Wenn dein code das sagt, "wenn das Kind nicht ein IContainer dann exceptions werfen" oder "wenn das Kind nicht ein IContainer dann vielleicht ist es ein "ifoo") vom so, ich werde versuchen, dass weiter", dann gibt es nicht eine implizite else-Anweisung gibt es? Ich bin wahrscheinlich etwas fehlt.
@MartinPeck, könnte es nicht sein, eine else-Klausel. Das ist der Grund, warum ich gesucht.
@MartinPeck hier ist ein Beispiel:
if (!(argument ist MapsControlViewModel vm)) { return; }
- ich könnte umkehren, wenn und legte die whoooole rest der Methode innerhalb der if - Klammern, aber dann würd ich bekomme Weihnachts-Baum-code, mit einer Menge von schließenden Klammern am Ende der Methode. Das ist viel weniger lesbar. InformationsquelleAutor der Frage Hugoware | 2009-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
ist der einzige Betreiber zu gehen (es gibt keine
IsNot
Betreiber).Können Sie bauen eine Erweiterung Methode, die es macht:
und dann verwenden, um:
, Und Sie könnte Folgen auf Ihr Thema:
Update (unter Berücksichtigung der OP-code-snippet):
Da Sie tatsächlich Gießen Sie den Wert danach, Sie konnte einfach
as
statt:InformationsquelleAutor der Antwort Mehrdad Afshari
Können Sie es auf diese Weise:
InformationsquelleAutor der Antwort cjk
Warum nicht einfach anders???
Seinen schmucken es vertraut und einfach ?
InformationsquelleAutor der Antwort Mark Broadhurst
So, wie Sie es ist in Ordnung, aber Sie könnte erstellen Sie eine Reihe von extension-Methoden, um "eine elegantere Möglichkeit zu prüfen, für die "NICHT" - Instanz".
Dann könnte man schreiben:
InformationsquelleAutor der Antwort Robert Cartaino
Hässlich? Ich bin nicht einverstanden. Der einzige andere Weg (ich persönlich finde das "hässlichere"):
InformationsquelleAutor der Antwort BFree
Den
is
- operator wertet einen booleschen Ergebnis, so dass Sie alles tun können, was Sie sonst tun können, als auf ein bool. Um Sie zu negieren verwenden Sie die!
Betreiber. Warum würden Sie wollen, um einen anderen Betreiber, die nur für diese?InformationsquelleAutor der Antwort Brian Rasmussen
Während der IS-operator ist in der Regel der beste Weg, es ist eine alternative, die Sie verwenden können, in einigen cirumstances. Sie können den as-operator verwenden, und testen Sie die null.
InformationsquelleAutor der Antwort Muad'Dib
Den extension-Methode
IsNot<T>
ist ein schöner Weg, um zu erweitern die syntax. Beachten Sieführt besser als etwas zu tun wie
In Ihrem Fall spielt es keine Rolle, wie Sie der Rückkehr aus der Methode. In anderen Worten, seien Sie vorsichtig, um nicht das Kontrollkästchen für den Typ und dann die Typ-Konvertierung sofort nach.
InformationsquelleAutor der Antwort Jeff
InformationsquelleAutor der Antwort Ternary
Während dies nicht vermeiden das problem der Klammern, zum Wohle der Menschen, die hier über Google, es sollte erwähnt werden, dass neuere syntax besteht (wie der C# 7), um den rest von deinem code ein wenig sauberer:
Dies vermeidet die Doppel-Besetzung, die null-check und eine variable zur Verfügung, die in Bereichen, wo es sein könnte null.
InformationsquelleAutor der Antwort StriplingWarrior