なぜGuid.IsNullOrEmpty()メソッドがないのですか


103

これはなぜ.NETのGuidにIsNullOrEmpty()メソッドがないのかと疑問に思っています(空の場合はすべてゼロを意味します)。

REST APIを作成するときに、ASP.NET MVCコードのいくつかの場所でこれが必要です。

それとも、インターネット上の誰も同じことを要求していないので、私は何かを逃していますか?


stackoverflow.com/questions/2344213/…から始めますが、あなたのニーズのためにありますGuid.Empty
V4Vendetta 2012年

回答:


236

Guid値の型なので、Guid最初に型の変数をnullにすることはできません。空のGUIDと同じかどうかを知りたい場合は、次のように使用できます。

if (guid == Guid.Empty)

Entity FrameworkがGuid変数をGuidとして定義する場合はどうですか?(nullable)?
Gautam Jain

6
@goths:必要に応じてif (nullableGuid == null || nullableGuid == Guid.Empty)...または独自の拡張メソッドを作成できます。おそらくそれはほとんどの人にとってそれが価値がないほどまれにしか出てきません。
Jon Skeet

2
@gothsすべての値タイプに対して一般的な拡張メソッドを作成できます。例:public static bool IsNullOrDefault<T>(this T? self) where T : struct { return !self.HasValue || self.Value.Equals(default(T)); }
Jeppe Stig Nielsen

27

1 Guidつには、null可能ではありません。あなたはチェックすることができます:

myGuid == default(Guid)

これは次と同等です:

myGuid == Guid.Empty

2
c#7.1以降、次のように使用できますmyGuid == default
Brad M

10

以下は、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()または何でも:)


2

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()か?
David Hedlund 2012年

0

他の人が指摘したように、問題の前提はすべてではありません。C#Guidはnullにできません。しかし、そうGuid?です。かどうかをチェックするのきれいな道Guid?であるnullGuid.Emptyの結果があればチェックであるGetValueOrDefault()ですGuid.Empty。例えば、

Guid? id;

// some logic sets id

if (Guid.Empty.Equals(guid.GetValueOrDefault()))
{
    // Do something
}

-1

あなたは私がいつもこのようなこの声明を見ていることを知っています

Guidは値型であるため、Guid型の変数を最初にnullにすることはできません

しかし、それは真実ではありません。

プログラムでGuidをnullに設定することはできないことに同意しますが、一部のSQLがUniqueIdentifierを取得してそれをGuidにマップし、その値がdbでnullの場合、その値はC#でnullとして表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.