2

MSDNによると:

?? 演算子は null 合体演算子と呼ばれ、null 許容値型または参照型の既定値を定義するために使用されます。

しかし、以下のコードを実行すると:

Guid test;
Guid otherGuid = test ?? Guid.NewGuid();

エラーが発生します:

演算子「??」タイプ 'System.Guid' および 'System.Guid' のオペランドには適用できません

Guid は参照型だと思っていました。そうではありませんか?なぜこれがうまくいかないのか、誰かが私に説明してもらえますか?

4

4 に答える 4

8

Guidは参照型ではなく、値型であり、nullを割り当てることはできません。そのため、でチェックすることはできません。??

次の行はエラーになります。

null不可能な値型であるため、nullを「System.Guid」に変換できません

Guid test = null;

Nullableを使用できます

Nullable<Guid> test = null;
Guid otherGuid = test ?? Guid.NewGuid();

または短縮形

Guid? test = null;
Guid otherGuid = test ?? Guid.NewGuid();
于 2012-09-07T05:10:27.973 に答える
7

Guidは構造体であり、クラスではないため、nullにすることはできません。

これを機能させるには、次のようなことを行うことができます。

Guid? nullableGuid = null;
/* At some point nullableGuid is perhaps assigned... */
Guid otherGuid = nullableGuid ?? Guid.NewGuid();
于 2012-09-07T05:11:53.280 に答える
4

GUID は構造体です。 http://msdn.microsoft.com/en-us/library/system.guid.aspx

チェックを行うために使用Guid.Emptyしてみてください。

Guid otherGuid = test == Guid.Empty ? Guid.NewGuid() : test;
于 2012-09-07T05:14:36.043 に答える