<> Und Nicht In VB.NET
Ich habe die spannende Aufgabe, herauszufinden, über VB.NET's <>
und Not
Betreiber. Not
- Ich nehme an, durch meine kleine it-Einsatz -, ist das funktionale äquivalent des !
in Sprachen wie C# und <>
gleichwertig von !=
.
In VB.NET ein häufiges problem ist dabei Boolesche Ausdrücke mit Objekten, die keine Referenz, wird er angezeigt. Also, wenn wir tun,
If Request.QueryString("MyQueryString") <> Nothing Then
Dieser tatsächlich scheitern, wenn der query-string nicht vorhanden ist. Warum, weiß ich nicht. Die Art und Weise, dass es gemacht wird von den älteren Programmierern ist wie folgt:
If Not Request.QueryString("MyQueryString") Is Nothing Then
Und diese neigt dazu, zu arbeiten. Für mich sind Sie funktional äquivalent, obwohl die Betreiber dazu neigen, andere Vergleiche abhängig von bestimmten Faktoren, wie-operator-Vorrang, warum es nicht funktioniert in diesem Fall jedoch, ich weiß es nicht, und weder habe ich irgendwelche relevanten material.
Bitte ich mir zu schreiben-standards-Dokumentation und wir sind es, die den Einsatz von entweder der Not
oder <>
. Irgendwelche Ideen auf, wie herum es sein sollte, oder Sie sollte es tun?
InformationsquelleAutor der Frage Kezzer | 2009-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe immer verwendet die folgenden:
Aber nur, weil syntaktisch, es liest sich besser.
Wenn die Prüfung für einen gültigen QueryString-Eintrag, den ich auch Folgendes verwenden:
Diese sind nur die Methoden die ich schon immer verwendet, so dass ich konnte nicht rechtfertigen, deren Nutzung zu anderen als für Sie am meisten Sinn machen für mich beim Lesen wieder-code.
InformationsquelleAutor der Antwort Charlie
Is
ist nicht das gleiche wie=
--Is
vergleicht die Referenzen, während=
vergleichen Sie die Werte.Wenn Sie v2 .Net Framework (oder höher), gibt es die
IsNot
Betreiber, die das richtige zu tun, und Lesen Sie mehr natürlich.InformationsquelleAutor der Antwort Rowland Shaw
Ich denke deine Frage läuft darauf hinaus, "den Unterschied zwischen (
Is
und=
) und auch (IsNot
und <>)".Die Antwort ist in beiden Fällen die gleiche :
=
und<>
sind implizit definiert für value-Typen und man kann explizit definieren, die Sie für Ihre Arten.Is
undIsNot
sind konzipiert für den Vergleich zwischen Referenz-Typen, um zu überprüfen, ob zwei Referenzen auf das gleiche Objekt beziehen.In Ihrem Beispiel, Sie vergleichen ein string-Objekt auf Nothing (Null), und da die
=
/<>
Operatoren sind definiert für Streicher, das erste Beispiel funktioniert. Jedoch, es funktioniert nicht, wenn eine Null Auftritt, da Strings sind Referenztypen und kann Null sein. Die bessere Art (als Sie Ahnen), ist die letztere version mitIs
/IsNot
.InformationsquelleAutor der Antwort Cerebrus
Hier ist die technische Antwort (Erweiterung auf Rowland Shaw ' s Antwort).
Den Ist Schlüsselwort prüft, ob die beiden Operanden Referenzen auf das gleiche Objekt im Speicher, und nur true zurück, wenn dies der Fall ist. Ich glaube, es ist funktional äquivalent zu Objekt.ReferenceEquals. Die IsNot Schlüsselwort ist einfach die Kurzform syntax für das schreiben
Not ... Is ...
nichts mehr.Den = (Gleichheit) operator vergleicht die Werte und in diesem Fall (wie in vielen anderen) ist äquivalent zu String.Gleich. Nun, die <> (Ungleichheit) der Betreiber hat nicht ganz die gleiche Analogie wie die Ist und IsNot keywords, da es überschrieben werden können getrennt von den = Betreiber je nach Klasse. Ich glaube, der Fall sollte immer sein, dass es gibt das logische inverse des = Betreiber (und sicherlich ist in dem Fall String), und erlaubt nur für einen effizienteren Vergleich zu aus, wenn die Prüfung auf Ungleichheit statt Gleichheit.
Beim Umgang mit strings, wenn Sie tatsächlich bedeuten, zu vergleichen, Referenzen, verwenden Sie immer die = - operator (oder-Zeichenkette ein.Gleich nehme ich an). In deinem Fall, da du die Prüfung für null (Nichts), es scheint, dass Sie brauchen, um die Nutzung Ist oder IsNot keyword (der Gleichheits-operator fehl, da kann es nicht vergleichen, die Werte von null-Objekten). Syntaktisch, die IsNot keyword ist ein bisschen schöner hier, also gehen Sie mit diesem.
InformationsquelleAutor der Antwort Noldorin
Verwenden Sie einfach was besser klingt.
Ich würde verwenden den ersten Ansatz, obwohl, weil es scheint, zu weniger Operationen.
InformationsquelleAutor der Antwort luiscubal
Wenn Sie brauchen, um zu wissen, ob die variable vorhanden ist, verwenden Sie Is/IsNot Nichts.
≪> verlangt, dass die variable, die Sie auswerten müssen die "<>" - operator definiert.
Check-out
und die daraus resultierenden Fehler
InformationsquelleAutor der Antwort hometoast
C# und VB.NET Compiler erzeugen oft unterschiedliche IL für Vorgänge, die scheinbar gleichwertig in beiden Sprachen. Es passiert einfach so, dass C# nicht die "erwarteten" was, wenn Sie schreiben
stringvar == null
aber VB.NET nicht. Um den gleichen Effekt in VB.NET Sie erzwingen, dass die wahre Referenz Gleichstellung mit derIs
Betreiber.InformationsquelleAutor der Antwort Christian Hayter
Ich bin ein total noob, ich kam hier, um herauszufinden, VB 's' nicht gleich' - syntax, so dass ich dachte, ich würde werfen Sie es in hier, im Falle jemand benötigt:
InformationsquelleAutor der Antwort Travis Heeter
in der Tat, das Ist wirklich gut, da die Entwickler, möchten Sie vielleicht, um das überschreiben der operator = = zu vergleichen mit dem Wert.
angenommen, Sie haben eine Klasse A, operator==, der Einem zu vergleichen der das Feld der zu dem parameter. dann werden Sie in Schwierigkeiten, in c#, um zu überprüfen, ob das Objekt Eine null ist mit folgenden code,
die wie Christian sagte, vb.net nicht 'erwartet', nichts.
InformationsquelleAutor der Antwort Hzj_jie