2009-03-24 2 views
5

言ってやる例えば、私が過去にダックオブジェクトが1番目または2番目にヌルであるかどうかを確認する必要がありますか?

Duck myDuck = DuckFactory.CreateDuck(); 

を作成することを、私はいつもmyDuckがnull

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

であるかどうかをチェックしてきた私は最近、ヌルをチェックするいくつかのコードを見てきました最初。

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

これらは同じですが、これらの違いはありますか?他にもパフォーマンス上のメリットはありますか?オブジェクトがnullかどうかをチェックするための推奨されるベストプラクティスはありますか?

+0

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

+0

少なくとも3のダブ:http://askjonskeet.com/search/?q = typo + C%2B%2B –

+0

私はデュー・ディリジェンスを行い、これについてdupを探しました。私にとっては、簡潔な方法で言葉遣いすることは非常に難しい概念でした。いずれにしても、大きな反応に感謝します。 – bendewey

答えて

16

二つ目は、これは(あなたの式はブール値に解決されない限り)C#には有効ではありません、有効な構造

if (myDuck = null) { 
} 

であるC/C++(および他の場所)に由来します。たとえば、これで有効なC#

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

が一定の第1を置くあなたが比較を望んでいた偶然の割り当てを停止する防御的でした。私はもっ​​と多くの人が変数を左に置くと言うでしょうが、定数を左に置くことには何も問題ありません。

ちょうど1つを選んで一貫性を持たせてください。

+0

はい、 "if(myDuck = null)"が有効な構文であり、プログラムエラーであるBIGを見つけにくい場合があります。 – dustyburwell

+0

私のコードでこのエラーを見たことはありませんでした。おそらく80年代の大きなことでした。 –

+0

(または他の人のコード) –

0

何も違いはないと思います。

if文は、それが含んでいる式が真であるかどうかを単にチェックします。 Wheter myDuckは==記号の右側の左にありますが、違いはありません。

1

あなたが事故でこれを入れていた場合にのみ差が発生します。

if(myDuck = null) ... 

しかし、現実には、C#コンパイラがこれを検出するのに十分スマートです。

あなたが事故でこれを置く場合:

if(null = myDuck) ... 

次に、このバックCまたはC++日間でエラーになります。

ロングストーリーショート:それはC#で違いはありません。

0

最初に 'null'を入れると、(myDuck = null)の場合に誤って割り当てられることがなくなります。しかし、コンパイラの中には、それをしようとするとエラーが発生するものがあります。 IMOそれはすべてのスタイルに来る - 1つを選択し、それにこだわる:)

0

一つは、JavaやC#のような他のC + +の構文のように見えます。

私が読んだから、 "ヌル== myDuck" 構文は、人々が誤って自分のif文で割り当てることからCに起源:

if (myDuck = null) 
    // returns true 
関連する問題