回答:
Guid
は値の型なので、Guid
最初に型の変数をnullにすることはできません。空のGUIDと同じかどうかを知りたい場合は、次のように使用できます。
if (guid == Guid.Empty)
if (nullableGuid == null || nullableGuid == Guid.Empty)
...または独自の拡張メソッドを作成できます。おそらくそれはほとんどの人にとってそれが価値がないほどまれにしか出てきません。
public static bool IsNullOrDefault<T>(this T? self) where T : struct { return !self.HasValue || self.Value.Equals(default(T)); }
1 Guid
つには、null可能ではありません。あなたはチェックすることができます:
myGuid == default(Guid)
これは次と同等です:
myGuid == Guid.Empty
myGuid == default
以下は、null許容のGuidの簡単な拡張メソッドです。
/// <summary>
/// Determines if a nullable Guid (Guid?) is null or Guid.Empty
/// </summary>
public static bool IsNullOrEmpty(this Guid? guid)
{
return (!guid.HasValue || guid.Value == Guid.Empty);
}
更新
これをどこでも使用したい場合は、通常のGuidの別の拡張メソッドを作成できます。nullになることは決してないので、これを気に入らない人もいます...しかし、それはあなたが探している目的を果たし、Guidで作業しているかどうかを知る必要はありませんか?またはGuid(リファクタリングなどに最適)。
/// <summary>
/// Determines if Guid is Guid.Empty
/// </summary>
public static bool IsNullOrEmpty(this Guid guid)
{
return (guid == Guid.Empty);
}
これでsomeGuid.IsNullOrEmpty();
、GuidとGuid?のどちらを使用していても、すべてのケースで使用できます。
私が言ったIsNullOrEmpty()
ように、値がnullである可能性がある(できない場合)ことを意味するため、一部の人々は名前について不満を言うでしょう。あなたが本当にしたい場合は、同様の拡張のために別の名前で出てくるIsNothing()
か、IsInsignificant()
または何でも:)
Guidに拡張メソッドを作成して、IsEmpty機能を追加できます。
public static class GuidEx
{
public static bool IsEmpty(this Guid guid)
{
return guid == Guid.Empty;
}
}
public class MyClass
{
public void Foo()
{
Guid g;
bool b;
b = g.IsEmpty(); // true
g = Guid.NewGuid();
b = g.IsEmpty; // false
b = Guid.Empty.IsEmpty(); // true
}
}
g = new Guid()
実際には空のGUIDを作成します。書くつもりでしたg = Guid.NewGuid()
か?
Guid.Empty