2013-04-29 11 views
13

デフォルトと比較するか空白ですか?</p> <pre><code>Guid value; // ... if (value != Guid.Empty) </code></pre> <p>または</p> <pre><code>if (value != default(Guid)) </code></pre> <p>私は第二と思うが、理由を説明することはできません。右のチェックは何

+3

うーん...何をチェックしようとしていますか? – Oded

+0

2番目の例で 'unassignedローカル変数 'value''を使用しています – Default

+4

' default(Guid)== Guid.Empty' – Oded

答えて

21

Guid.Empty == default(Guid)以来、それは本当に重要ではありませんが、私は可読性のためにGuid.Emptyを好むでしょう。

+1

私はどちらも可読性の観点からは問題ないと主張しますが、実際には小切手が実際に意味するものになります。レコードがデフォルト状態かどうかを確認することは、レコードに空の値(IMO)が含まれているかどうかをチェックすることとは異なります。 – James

4

あなたは初期化されていない状態の記録を持っているので、私はそれゆえ、それはデフォルト値が含まれます、純粋に二を言うでしょう。変数が空であるかどうかではなく、変数がデフォルト状態かどうかをチェックしています.2つの異なるチェック(IMO)です。

Guid.Empty

は、それは問題ではありません技術的な観点からして、しかし、 Guid.Emptyに比較することは私に特定の値についてのあなたのチェックが、レコードがであるかどうかという印象を与えます.NETで default(Guid)に相当しますデフォルト状態。

5

Guid.Emptyは、new Guid()に相当し、default(Guid)にも相当します。

Guid構造を逆コンパイルすると、そのように見えます。 Guidので

public static readonly Guid Empty = new Guid(); 

Default Values Tableから、structあります。

すべての値タイプフィールドをデフォルトの 値とすべての参照タイプフィールドをnullに設定することによって生成される値です。

Guidのフィールドタイプは、byteintshortある(このタイプのデフォルト値は0である)ので、私たちはdefault(Guid)を使用するときに我々はすべてのフィールドでGuidを取得するには、0です。 Guid.Empty Field

値すべてゼロでのGuid構造の読み取り専用インスタンスから

このコードを書くとき、

Console.WriteLine(default(Guid)); 
Console.WriteLine(new Guid()); 

出力;

00000000-0000-0000-0000-000000000000 
00000000-0000-0000-0000-000000000000 

あなたが気にした場合、読みやすさ(私はあなたがすべきだと思うもの)Guid.Emptyは、私には良さそうです。

+4

これは私が今まで作った中で最も不必要な説明です: –

4

どちらも同じです!

Guid.Emptyは、GUIDの読み取り専用フィールドで、値は{00000000-0000-0000-0000-000000000000}です。

default(Guid)を指定すると、コンパイルによって定数値({00000000-0000-0000-0000-000000000000})が作成されます。

いずれの場合も、値はメモリ内の別の値と比較されます。

可読性のためにGuid.Emptyを使用してください。
ジェネリックで作業する場合は、default(T)を使用してください。

2

個人的には、可読性のためにGuid.Emptyを使用します。私が実際にdefaultを使用する唯一の時間は、例えばKeyValuePairをチェックするときのような他のオプションがないときです。

2

あなたは、次を使用する必要があります。

var guidIsEmpty = value == Guid.Empty; 

どちらが技術的にある正しい、しかし、間違いなくGuid.Emptyと比較すると、より可読コードになります。

0

私は、これは古いスレッドですけど、ちょうどチャイムしたい:

はメソッドのパラメータとしてのGUIDのデフォルト値を定義する場合、あなたは、GUIDではなく、デフォルト(GUID)を使用する必要があります.EmptyはGuid.Emptyがコンパイル時定数と見なされないためです。

これは、コンパイルします:

private void MyMethod(Guid id = default(Guid)) 

これはコンパイルされません。

private void MyMethod(Guid id = Guid.Empty) 
+0

@Mekuriに感謝します。しかし、それは直接質問に答えません。あなたの投稿はコメントとしては素晴らしいですが、SOの点で回答になるほどの情報はありません。 –

関連する問題