Frage

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?

BEARBEITEN:Wenn Sie der Meinung sind, dass beide gleichermaßen akzeptabel sind, halten Sie es dann für das Beste, eine auszuwählen und dabei zu bleiben, oder ist es in Ordnung, sie zu mischen?

War es hilfreich?

Lösung

Wenn Sie einen Blick auf die MSIL werfen, während sie ausgeführt wird, werden Sie feststellen, dass sie nicht bis zum exakt gleichen Code kompiliert wird.Wenn Sie IsNothing() verwenden, wird diese Methode tatsächlich aufgerufen, anstatt nur den Ausdruck auszuwerten.

Der Grund, warum ich dazu tendiere, „Ist Nichts“ zu verwenden, liegt darin, dass es, wenn ich es negiere, zu „IsNot Nothing“ und nicht zu „Not IsNothing(object)“ wird, was meiner Meinung nach besser lesbar erscheint.

Andere Tipps

Ich finde, dass Patrick Steele beantwortete diese Frage am besten auf seinem Blog: IsNothing() vermeiden

Ich habe hier keine seiner Antworten kopiert, um sicherzustellen, dass Patrick Steele die Anerkennung für seinen Beitrag erhält.Aber ich denke, wenn Sie sich entscheiden möchten, 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 – Kommentar von VoteCoffe hier

Teilinhalt des Artikels:Nachdem ich weiteren 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 ihr natürlich alles übergeben, was Sie möchten.Wenn es sich um einen Werttyp handelt, packt .NET ihn in ein Objekt und übergibt ihn an IsNothing – was bei einem geboxten Wert immer „false“ zurückgibt!Der VB.NET-Compiler überprüft die Syntax des „Ist Nichts“-Stils und kompiliert nicht, wenn Sie versuchen, einen „Ist Nichts“-Befehl für einen Werttyp auszuführen.Aber die Funktion IsNothing() lässt sich ohne Beanstandungen kompilieren.-PSteele – VoteCoffee

Sie sollten die Verwendung unbedingt vermeiden IsNothing()

Hier sind 4 Gründe aus dem Artikel IsNothing() VS Is Nothing

  1. Am wichtigsten, IsNothing(object) wird ihm alles als Objekt übergeben, sogar Werttypen!Da Werttypen nicht sein können Nothing, es ist ein völlig verschwendeter Scheck.
    Nehmen Sie das folgende Beispiel:

    Dim i As Integer
    If IsNothing(i) Then
       ' Do something 
    End If
    

    Dies lässt sich gut kompilieren und ausführen, während dies:

    Dim i As Integer
    If i Is Nothing Then
        '   Do something 
    End If
    

    Wird nicht kompiliert, stattdessen gibt der Compiler den Fehler aus:

    Der „Is“-Operator akzeptiert keine Operanden vom Typ „Integer“.
    Operanden müssen Referenztypen oder Nullable-Typen sein.

  2. IsNothing(object) ist tatsächlich Teil eines Teils der Microsoft.VisualBasic.dll.
    Dies ist unerwünscht, da eine unnötige Abhängigkeit von der VisualBasic-Bibliothek besteht.

  3. Es ist langsam – tatsächlich 33,76 % langsamer (über 1000000000 Iterationen)!

  4. Vielleicht persönliche Präferenz, aber IsNothing() liest sich wie ein Yoda-Zustand.Wenn Sie sich eine Variable ansehen, überprüfen Sie deren Zustand und betrachten sie als Gegenstand Ihrer Untersuchung.

    d.h.tut Es tun x?--- NICHT Ist xeine Eigenschaft von Es?

    Also denke ich If a IsNot Nothing liest sich besser als If Not IsNothing(a)

Ich stimme „Ist nichts“ zu.Wie oben erwähnt, ist es leicht, mit „IsNot Nothing“ zu negieren.

Ich finde es einfacher zu lesen...

If printDialog IsNot Nothing Then
    'blah
End If

als das...

If Not obj Is Nothing Then
    'blah
End If

VB ist voll von solchen Dingen und versucht, es sowohl „wie Englisch“ als auch komfortabel für Leute zu machen, die an Sprachen gewöhnt sind, die häufig () und {} verwenden.Zum Beispiel hat VB auf der Seite „like english“ das „Ist es nicht" Stichwort ... und nein, ich mache keine Witze.Und auf der anderen Seite können Sie, wie Sie wahrscheinlich bereits wissen, die meiste Zeit () mit Funktionsaufrufen verwenden, wenn Sie möchten, aber nicht müssen.

Ich bevorzuge IsNothing() ... aber ich verwende C und C#, also ist das genau das, was bequem ist.Und ich denke, es ist besser lesbar.Aber entscheiden Sie sich für das, was sich für Sie angenehmer anfühlt.

Ich neige zur „Ist Nichts“-Alternative, hauptsächlich weil sie eher OO scheint.

Sicherlich Visual Basic nicht Habe das Schlüsselwort Ain't erhalten.

Ich neige auch dazu, die Is Nothing-Version zu verwenden, teilweise weil ich sie genauso häufig verwende wie in SQL.

Ursprünglich habe ich IsNothing verwendet, aber in neueren Projekten bin ich dazu übergegangen, Is Nothing zu verwenden, hauptsächlich aus Gründen der Lesbarkeit.Ich bleibe nur dann bei IsNothing, wenn ich Code dort verwalte, wo er durchgehend verwendet wird, und ich konsistent bleiben möchte.

Is Nothing erfordert ein Objekt, dem der Wert Nothing zugewiesen wurde.IsNothing() kann jede Variable annehmen, die nicht initialisiert wurde, auch vom numerischen Typ.Dies ist beispielsweise nützlich, wenn Sie testen, ob ein optionaler Parameter übergeben wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top