Verwendet hier jemand VB.NET und hat eine starke Präferenz für oder gegen die Verwendung IsNothing
im Gegensatz zu Is Nothing
(zum Beispiel If IsNothing(anObject)
oder If anObject Is Nothing...
)? Wenn ja warum?
EDIT: Wenn Sie denken, dass beide gleich akzeptabel sind, denken Sie, dass es am besten ist, eine auszuwählen und dabei zu bleiben, oder ist es in Ordnung, sie zu mischen?
IsNothing()
Antworten:
Wenn Sie sich die MSIL während der Ausführung ansehen, werden Sie feststellen, dass sie nicht auf genau denselben Code kompiliert wird. Wenn Sie IsNothing () verwenden, wird diese Methode tatsächlich aufgerufen, anstatt nur den Ausdruck auszuwerten.
Der Grund, warum ich dazu neige, "Is Nothing" zu verwenden, ist, wenn ich negiere, dass es eher "IsNot Nothing" als "Not IsNothing (Objekt)" wird, was meiner Meinung nach besser lesbar ist.
quelle
Ich finde, dass Patrick Steele diese Frage am besten in seinem Blog beantwortet hat: Vermeiden von IsNothing ()
Ich habe keine seiner Antworten hier kopiert, um sicherzustellen, dass Patrick Steele seinen Beitrag gutschreibt. Aber ich denke, wenn Sie versuchen zu entscheiden, ob Sie Is Nothing oder IsNothing verwenden möchten, sollten Sie seinen Beitrag lesen. Ich denke, Sie werden mir zustimmen, dass Is Nothing die beste Wahl ist.
Bearbeiten - VoteCoffe's Kommentar hier
Teilweise Artikelinhalt: Nachdem ich mehr Code überprüft hatte, fand ich einen weiteren Grund heraus, warum Sie dies vermeiden sollten: Es akzeptiert Werttypen! Da IsNothing () eine Funktion ist, die ein 'Objekt' akzeptiert, können Sie natürlich alles übergeben, was Sie wollen. Wenn es sich um einen Werttyp handelt, packt .NET ihn in ein Objekt ein und übergibt ihn an IsNothing - was bei einem Wert in einem Box immer false zurückgibt! Der VB.NET-Compiler überprüft die Syntax im "Is Nothing" -Stil und kompiliert nicht, wenn Sie versuchen, ein "Is Nothing" für einen Werttyp auszuführen. Die Funktion IsNothing () wird jedoch ohne Beschwerden kompiliert. -PSteele - VoteCoffee
quelle
Sie sollten die Verwendung unbedingt vermeiden
IsNothing()
Hier sind 4 Gründe aus dem Artikel IsNothing () VS Is Nothing
Am wichtigsten
IsNothing(object)
ist, dass alles als Objekt übergeben wurde, sogar Werttypen! Da Werttypen nicht sein könnenNothing
, ist es eine völlig verschwendete Prüfung.Nehmen Sie das folgende Beispiel:
Dies wird kompiliert und läuft gut, während dies:
Wird nicht kompiliert, stattdessen wird der Compiler den Fehler auslösen:
IsNothing(object)
ist eigentlich Teil eines Teils derMicrosoft.VisualBasic.dll
.Dies ist unerwünscht, da Sie eine nicht benötigte Abhängigkeit von der VisualBasic-Bibliothek haben.
Es ist langsam - 33,76% langsamer (über 1000000000 Iterationen)!
Vielleicht persönliche Präferenz,
IsNothing()
liest sich aber wie ein Yoda-Zustand . Wenn Sie sich eine Variable ansehen, überprüfen Sie ihren Status, wobei diese Gegenstand Ihrer Untersuchung ist.dh macht es x? --- NICHT Ist es
x
eine Eigenschaft davon ?Also ich denke
If a IsNot Nothing
liest sich besser alsIf Not IsNothing(a)
quelle
Ich stimme "Is Nothing" zu. Wie oben erwähnt, ist es einfach, mit "IsNot Nothing" zu negieren.
Ich finde das leichter zu lesen ...
als das...
quelle
VB ist voll von solchen Dingen, die versuchen, es sowohl "wie Englisch" als auch komfortabel für Leute zu machen, die an Sprachen gewöhnt sind, die () und {} häufig verwenden. Zum Beispiel auf der Seite "wie Englisch" ... VB hat das Schlüsselwort " Ain't " ... und nein, ich scherze nicht. Und auf der anderen Seite, wie Sie wahrscheinlich schon die meiste Zeit wissen, können Sie () mit Funktionsaufrufen verwenden, wenn Sie möchten, aber nicht müssen.
Ich bevorzuge IsNothing () ... aber ich benutze C und C #, also ist das genau das, was bequem ist. Und ich denke, es ist besser lesbar. Aber gehen Sie mit allem, was sich für Sie angenehmer anfühlt.
quelle
Ich neige zur Alternative "Is Nothing", vor allem, weil es mehr OO zu sein scheint.
Sicherlich hat Visual Basic nicht das Schlüsselwort Ain't.
quelle
Ich neige auch dazu, die Is Nothing-Version teilweise zu verwenden, weil ich sie genauso oft benutze wie in SQL.
quelle
Ich habe ursprünglich IsNothing verwendet, aber ich habe Is Nothing in neueren Projekten verwendet, hauptsächlich aus Gründen der Lesbarkeit. Das einzige Mal, wenn ich bei IsNothing bleibe, ist, wenn ich Code dort pflege, wo er überall verwendet wird, und ich möchte konsistent bleiben.
quelle
Is Nothing erfordert ein Objekt, das dem Wert Nothing zugewiesen wurde. IsNothing () kann jede nicht initialisierte Variable annehmen, auch vom numerischen Typ. Dies ist beispielsweise nützlich, wenn Sie testen, ob ein optionaler Parameter übergeben wurde.
quelle
Nothing
Is Nothing