2009-03-24 33 views
5

Nói ví dụ mà tôi tạo ra một DuckTôi có nên kiểm tra xem một đối tượng có rỗng hay không?

Duck myDuck = DuckFactory.CreateDuck(); 

Trong quá khứ tôi đã luôn luôn kiểm tra để xem nếu myDuck là null

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

Tôi vừa mới xem xét một số mã mà kiểm tra cho null Đầu tiên.

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

Dường như với tôi rằng chúng giống nhau, nhưng có sự khác biệt nào giữa hai loại này không? Có bất kỳ lợi ích hiệu suất nào so với cái kia không? Có một thực hành tốt nhất được đề nghị để kiểm tra xem một đối tượng là null?

+0

Dupie McDuperson: http://stackoverflow.com/questions/ 655657/0-variable-or-null-obj-an-lỗi thời-thực hành-in-c/655670 # 655670 – Dana

+0

Ngừng ít nhất 3: http://askjonskeet.com/search/?q = typo + C% 2B% 2B –

+0

Tôi đã cố gắng thực hiện trách nhiệm giải trình của mình, tìm kiếm một sự lừa đảo về vấn đề này. Đối với tôi, đó là một khái niệm rất khó để diễn đạt theo một cách súc tích. Dù bằng cách nào, cảm ơn cho những phản ứng tuyệt vời. – bendewey

Trả lời

16

Thứ hai bắt nguồn từ C/C++ (và các nơi khác), nơi đây là một cấu trúc hợp lệ

if (myDuck = null) { 
} 

Đó là không hợp lệ trong C# (trừ trường hợp biểu hiện của bạn giải quyết để một boolean). Ví dụ: điều này là hợp lệ C#

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

Đặt hằng số đầu tiên là phòng thủ để dừng giao ngẫu nhiên khi bạn muốn so sánh. Tôi muốn nói nhiều người đặt biến ở bên trái nhưng không có gì sai khi đặt hằng số sang bên trái.

Chỉ cần chọn một và nhất quán về nó.

+0

có, trong đó "if (myDuck = null)" là một cấu trúc hợp lệ VÀ nó có thể gây ra LỚN, khó tìm, lỗi chương trình. – dustyburwell

+0

Tôi chưa bao giờ thấy lỗi đó trong mã của mình, có thể đó là một điều lớn trong những năm 80 –

+0

(Hoặc mã của bất kỳ ai) –

0

Tôi nghĩ rằng không có sự khác biệt nào.

Câu lệnh if sẽ chỉ kiểm tra wheter hoặc không phải biểu thức nó chứa là đúng. Wheter myDuck nằm bên trái của biểu tượng == không có sự khác biệt.

1

Sự khác biệt chỉ xảy ra nếu bạn đã đặt này một cách tình cờ:

if(myDuck = null) ... 

Nhưng trong thực tế, các biên dịch C# là đủ thông minh để phát hiện này.

Nếu bạn đặt này một cách tình cờ:

if(null = myDuck) ... 

Sau đó, điều này sẽ dẫn đến một lỗi trở lại trong C hoặc C++ ngày.

Câu chuyện dài ngắn: nó không có sự khác biệt trong C#.

0

Đặt 'null' trước tiên sẽ ngăn việc gán ngẫu nhiên nếu (myDuck = null). Tuy nhiên, một số trình biên dịch đưa ra một lỗi khi cố gắng thực hiện điều đó, và do đó, vấn đề là tranh luận. IMO tất cả đi xuống theo phong cách - chọn một, và gắn bó với nó :)

0

Giống như cú pháp C++, cái khác như Java hoặc C#.

Từ những gì tôi đã đọc, The "null == myDuck" cú pháp có nguồn gốc trong C từ những người vô tình gán nhập nếu báo cáo của họ:

if (myDuck = null) 
    // returns true 
Các vấn đề liên quan