Guid.NewGuid()との違いは何new Guid()ですか?
どちらが好ましいですか?
new Guid()「空の」all-0GUIDを作成します(00000000-0000-0000-0000-000000000000はあまり役に立ちません)。
Guid.NewGuid()おそらく必要な、一意の値を持つ実際のGUIDを作成します。
Guid.NewGuid()衝突の可能性が非常に低いように設計されたアルゴリズムを使用して、新しいUUIDを作成します。
new Guid()すべてゼロのUUIDを作成します。
通常、前者をお勧めします。これは、UUIDのポイントであるためです(もちろん、他の場所から受信している場合を除きます)。
本当にすべてゼロのUUIDが必要な場合もありますが、この場合Guid.Empty、またはそのdefault(Guid)意図がより明確であり、一意の値が作成されたことを期待して誰かがそれを読む可能性は低くなります。
全体として、new Guid()この明確さの欠如のためにそれほど有用ではありませんが、すべてゼロとヌルの値を返すパラメーターなしのコンストラクターを持たない値型を持つことはできません。
編集:実際には、すべてをゼロとnullに設定しない値型にパラメーターなしのコンストラクターを設定することは可能ですが、C#では実行できません。また、いつ呼び出されるか、いつ呼び出されるかについてのルールもあります。作成されたすべてゼロの構造体は混乱を招くため、とにかくそれは良い考えではありません。
[これは古いスレッドであり、もう少し詳細を追加していることを理解しています]MarkとJonHannaによる2つの回答は、いくつかの興味があるかもしれませんが、違いを要約しています。
Guid.NewGuid()
最終的にCoCreateGuid(Ole32へのCOM呼び出し)を呼び出し(ここを参照)、実際の作業はUuidCreateによって行われます。
Guid.Emptyは、Guidにすべてゼロが含まれているかどうかを確認するために使用されます。これは、問題のGuidの値を新しいGuid()と比較することによっても実行できます。
したがって、一意の識別子が必要な場合、答えはGuid.NewGuid()です。
Guid.NewGuid()、意図したとおりにGUIDを作成するため。
Guid.NewGuid()空のGuidオブジェクトを作成し、呼び出して初期化しCoCreateGuid、オブジェクトを返します。
new Guid()空のGUIDを作成するだけです(すべてゼロだと思います)。
Guidコンストラクターをそのまま公開する必要があったと思いstructます。