違いは何ですか Guid.NewGuid()
とはnew Guid()
?
どちらが好ましいですか?
違いは何ですか Guid.NewGuid()
とはnew Guid()
?
どちらが好ましいですか?
回答:
new Guid()
「空」のすべて0のGUIDを作成します(00000000-0000-0000-0000-000000000000はあまり役に立ちません)。
Guid.NewGuid()
あなたがおそらく望んでいる、ユニークな値を持つ実際のGUIDを作成します。
new Guid()
と同等Guid.Empty
です。
Guid.NewGuid()
衝突をほとんど起こさないように設計されたアルゴリズムを使用して、新しいUUIDを作成します。
new Guid()
すべてゼロのUUIDを作成します。
前者の方が一般的ですが、それがUUIDのポイントだからです(もちろん他の場所から受け取っている場合を除きます)。
実際にすべて0のUUIDが必要な場合もありますが、この場合、Guid.Empty
またはdefault(Guid)
意図が明確であり、一意の値が作成されていると予期してそれを読み取る可能性は低くなります。
全部で、 new Guid()
この明快さの欠如のためにそれほど有用はありませんが、すべて0とnullの値を返すパラメーターなしのコンストラクターがない値型を持つことはできません。
編集:実際には、すべてをゼロとnullに設定しない値型にパラメーターなしのコンストラクターを設定することは可能ですが、C#では実行できません。また、いつ呼び出されるか、いつ呼び出されるかに関するルール作成されたすべて0の構造体であると混乱を招くので、とにかく良い考えではありません。
[これは古いスレッドであり、もう少し詳細を追加しているだけだと理解しています] MarkとJon Hannaによる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
。