VB.NET - Nimic nu este nimic

Are cineva aici VB.NET și are o preferință puternică pentru sau împotriva folosirii IsNothing , spre deosebire de Is Nothing (de exemplu If IsNothing (anObject) cod> sau Dacă anObject nu este nimic ... )? Dacă da, de ce?

EDIT: Dacă credeți că ambele sunt la fel de acceptabile, credeți că este mai bine să alegeți una și să vă lipiți de ea sau este bine să le amestecați?

0
fr hi bn
Există multe motive bune pentru a evitați să utilizați IsNothing()
adăugat autor KyleMit, sursa
@JesseChisholm, Există prea multe pentru un singur comentariu, dar comentariul meu anterior a postat această legătură într-un articol care enumeră 5 tipuri diferite blog.reneorban.com/2011/12/vbnet-isnothing-vs-is-nothing.htm‌ l
adăugat autor KyleMit, sursa
Răspunsurile tehnologice sunt cu adevărat interesante, dar rușinea că întrebarea a rămas un pic prea deschisă și a generat câteva răspunsuri fără nici un folos, doar din ce în ce mai vagă preferință personală
adăugat autor underscore_d, sursa

9 răspunsuri

VB este plină de lucruri de genul asta, încercând să o facă atât "ca engleza", cât și confortabilă pentru persoanele care sunt obișnuite cu limbile care folosesc() și {} mult. De exemplu, pe partea "ca engleza" ... VB are " Nu este " cuvânt cheie ... și nu, nu glumesc. Și pe de altă parte, după cum probabil știți deja de cele mai multe ori, puteți utiliza() funcțiile dacă doriți, dar nu trebuie.

Eu prefer IsNothing() ... dar eu folosesc C și C#, deci este doar ceea ce este confortabil. Și cred că este mai ușor de citit. Dar du-te cu orice te simți mai confortabil pentru tine.

0
adăugat
Linkul dvs. este mort, astfel încât ceea ce merită aici este unul viu: web.archive.org/web/20050308014055/http://ea.3leaf.com/2004/‌ 08 / & hellip; Merită totuși să observăm că, spre deosebire de convingerile populare nu este adevarat.
adăugat autor Matt Wilko, sursa

Dacă aruncați o privire la MSIL în timp ce se execută, veți vedea că nu se compilează până la exact același cod. Când utilizați IsNothing (), el face de fapt un apel la această metodă, spre deosebire de evaluarea doar a expresiei.

Motivul pentru care mi-ar fi tendința să mă aplec spre folosirea "Nu este nimic" este atunci când negăm că devine "Nimic nu este" mai degrabă decât "Nu este nimic (obiect)" pe care eu personal o simt mai ușor de citit.

0
adăugat

De asemenea, am tendința de a folosi parțial Is It Nothing versiunea de a folosi-o la fel de mult ca mine în SQL.

0
adăugat

Sunt de acord cu "Nu este nimic". Așa cum am spus mai sus, este ușor de negat cu "IsNot Nothing".

Mi se pare mai ușor de citit ...

If printDialog IsNot Nothing Then
    'blah
End If

decât asta...

If Not obj Is Nothing Then
    'blah
End If
0
adăugat

Mă înclinăm spre alternativa "Nu este nimic", în primul rând pentru că pare mai mult OO.

Surely Visual Basic ain't got the Ain't keyword.

0
adăugat
Poate VB.NET să facă metode de extensie? :)
adăugat autor klkitchens, sursa

You should absolutely avoid using IsNothing()

Here are 4 reasons from the article IsNothing() VS Is Nothing

  1. Most importantly, IsNothing(object) has everything passed to it as an object, even value types! Since value types cannot be Nothing, it?s a completely wasted check.
    Take the following example:

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

    This will compile and run fine, whereas this:

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

    Will not compile, instead the compiler will raise the error:

    'Is' operator does not accept operands of type 'Integer'.
    Operands must be reference or nullable types.

  2. IsNothing(object) is actually part of part of the Microsoft.VisualBasic.dll.
    This is undesirable as you have an unneeded dependency on the VisualBasic library.

  3. Its slow - 33.76% slower in fact (over 1000000000 iterations)!

  4. Perhaps personal preference, but IsNothing() reads like a Yoda Condition. When you look at a variable you're checking it's state, with it as the subject of your investigation.

    i.e. does it do x? --- NOT Is xing a property of it?

    So I think If a IsNot Nothing reads better than If Not IsNothing(a)

0
adăugat

Am folosit inițial IsNothing, dar m-am îndreptat spre folosirea Nimic în proiecte mai noi, în principal pentru lizibilitate. Singurul moment în care stau cu Nimic nu este dacă mențin cod acolo unde este folosit și vreau să rămân consecvent.

0
adăugat

I find that Patrick Steele answered this question best on his blog: Avoiding IsNothing()

N-am copiat nici un răspuns din partea lui, pentru a-mi asigura că Patrick Steele obține credit pentru postul său. Dar cred că dacă încercați să decideți dacă să utilizați Nimic sau Nimic nu trebuie să-i citiți postul. Cred că veți fi de acord că Nimic nu este cea mai bună alegere.

0
adăugat
Conținut parțial al articolului: După ce am examinat mai multe coduri, am aflat un alt motiv pentru care ar trebui să evitați acest lucru: acceptă tipuri de valori! Evident, din moment ce IsNothing() este o funcție care acceptă un "obiect", puteți trece orice doriți. Dacă este vorba de un tip de valoare, .NET îl va pune într-un obiect și îl va trece la IsNothing - care va întoarce întotdeauna fals pe o valoare în cutie! Compilatorul VB.NET va verifica sintaxa de stil "Nu este nimic" și nu va compila dacă încercați să faceți un "Nu este nimic" pe un tip de valoare. Dar funcția IsNothing() se
adăugat autor VoteCoffee, sursa
Postați unele dintre conținuturi, deoarece niciodată nu știți dacă link-ul va deveni mort și am crezut că a adăugat un punct bun la acoperire.
adăugat autor VoteCoffee, sursa

Nimic nu necesită un obiect care a fost atribuit valorii Nimic. IsNothing() poate lua orice variabilă care nu a fost inițializată, inclusiv de tip numeric. Acest lucru este util, de exemplu, când testați dacă a fost trecut un parametru opțional.

0
adăugat
Este gresit. Esti sigur ca nu ai facut-o in mana gresita? " IsNothing este destinat să funcționeze pe tipuri de referință.Un tip de valoare nu poate să dețină valoarea Nimic și să revină la valoarea sa implicită dacă atribuiți Nimic [... ] IsNothing întotdeauna se întoarce False ". Dar Nimic <
adăugat autor underscore_d, sursa