2009-03-24 10 views
5

na przykład powiedzieć, że tworzę DuckCzy powinienem sprawdzić, czy obiekt jest pusty pierwszy czy drugi?

Duck myDuck = DuckFactory.CreateDuck(); 

w przeszłości zawsze sprawdzić, czy myDuck jest null

if (myDuck == null) 
{ 
    // Do stuff 
} 

I niedawno wyglądało na to sprawdzić dla wartości null jakiegoś kodu pierwszy.

if (null == myDuck) 
{ 
    // Do stuff 
} 

Wydaje mi się, że są one takie same, ale czy są jakieś różnice między tymi dwoma? Czy są jakieś korzyści z wydajności dla jednego nad drugim? Czy istnieje zalecana sprawdzona metoda sprawdzania, czy obiekt jest pusty?

+0

Dupie McDuperson: http://stackoverflow.com/questions/ 655657/0-variable-or-null-obj-an-outdated-in-c/655670 # 655670 – Dana

+0

Liczba kopii co najmniej 3: http://askjonskeet.com/search/?q = literówka + C% 2B% 2B –

+0

Próbowałem wykonać należytą staranność, poszukując dupta w tej sprawie. Dla mnie bardzo trudne było zwerbalizowanie w zwięzły sposób. Tak czy siak, dzięki za wspaniałe odpowiedzi. – bendewey

Odpowiedz

16

Drugi wynika z C/C++ (i gdzie indziej), gdzie jest to prawidłowy skonstruować

if (myDuck = null) { 
} 

To nie jest ważne w C# (chyba że wyrażenie postanawia wartość logiczną). Na przykład, jest to ważny C#

bool b = ... 
if (b = true) { 
} 

Umieszczenie stałej pierwszy był defensywny powstrzymać przypadkowe przyporządkowanie kiedy chciał porównanie. Powiedziałbym, że więcej osób umieściło zmienną po lewej stronie, ale nie ma nic złego w umieszczaniu stałej w lewo.

Wystarczy wybrać jedną i zachować spójność.

+0

tak, gdzie "if (myDuck = null)" jest prawidłową konstrukcją I może powodować WIELKIE, trudne do znalezienia, błędy programu. – dustyburwell

+0

Nigdy nie widziałem tego błędu w moim kodzie, może to była wielka rzecz w latach 80. –

+0

(Albo czyjkolwiek kod) –

0

Myślę, że nie ma żadnej różnicy.

Instrukcja if po prostu sprawdzi, czy wyrażenie, które zawiera, jest prawdziwe. Wheter myDuck znajduje się po lewej stronie symbolu == nie ma znaczenia.

1

Jedyna różnica występuje, jeśli były, aby umieścić to przez przypadek:

if(myDuck = null) ... 

Jednak w rzeczywistości, kompilator C# jest wystarczająco inteligentny, aby wykryć.

Jeśli umieścisz to przez przypadek:

if(null = myDuck) ... 

Wtedy to spowodować wystąpienie błędu z powrotem w C lub C++ dni.

Krótka historia: nie ma różnicy w języku C#.

0

Naciśnięcie "null" zapobiega przypadkowemu przypisaniu, jeśli (myDuck = null). Jednak niektóre kompilatory rzucają błąd, gdy próbują to zrobić, i dlatego punkt jest dyskusyjny. IMO wszystko sprowadza się do stylu - wybierz jeden i trzymaj się go :)

0

Jeden wygląda jak składnia C++, drugi jak Java lub C#.

Z tego co czytałem The "null == myDuck" składni w C pochodzi od ludzi przypadkowo przypisywania swoich if:

if (myDuck = null) 
    // returns true