Neden bir Guid.IsNullOrEmpty () yöntemi yok


103

Bu, Guid in .NET'in neden IsNullOrEmpty()yönteme sahip olmadığını merak etmeme neden oluyor (burada boş, tümü sıfır anlamına geliyor)

REST API'yi yazarken ASP.NET MVC kodumun birkaç yerinde buna ihtiyacım var.

Yoksa internetteki hiç kimse aynısını istemediği için bir şey mi kaçırıyorum?


Stackoverflow.com/questions/2344213/… başlamak için ama ihtiyaçlarınız içinGuid.Empty
V4Vendetta

Yanıtlar:


236

Guidbir değer türüdür , dolayısıyla türden bir değişken Guidbaşlamak için boş olamaz. Boş kılavuzla aynı olup olmadığını öğrenmek istiyorsanız, sadece şunları kullanabilirsiniz:

if (guid == Guid.Empty)

Entity Framework'ün Guid değişkenlerini Guid olarak tanımladığı durumlar ne olacak? (null yapılabilir)?
Gautam Jain

6
@goths: O halde if (nullableGuid == null || nullableGuid == Guid.Empty)... kullanabilirsin ya da gerçekten istiyorsan kendi uzatma yöntemini yaratabilirsin. Muhtemelen çoğu insan için buna değmeyecek kadar nadiren ortaya çıkıyor.
Jon Skeet

2
@goths Tüm değer türleri için genel bir genişletme yöntemi oluşturabilirsiniz. Örneğin:public static bool IsNullOrDefault<T>(this T? self) where T : struct { return !self.HasValue || self.Value.Equals(default(T)); }
Jeppe Stig Nielsen

28

Bir kere Guidnull olamaz. Kontrol edebilirsiniz:

myGuid == default(Guid)

bu şuna eşdeğerdir:

myGuid == Guid.Empty

2
C # 7.1'den itibaren, kullanabilirsinizmyGuid == default
Brad M

10

Boş değer atanabilir bir Kılavuz için basit bir uzatma yöntemi.

/// <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);
}

GÜNCELLEME

Bunu gerçekten her yerde kullanmak istiyorsanız, normal bir Kılavuz için başka bir uzatma yöntemi yazabilirsiniz. Asla boş olamaz, bu yüzden bazı insanlar bundan hoşlanmayacak ... ama aradığınız amaca hizmet ediyor ve Guid ile çalışıp çalışmadığınızı bilmek zorunda değil misiniz? veya Guid (yeniden faktoring vb. için güzel).

/// <summary>
/// Determines if Guid is Guid.Empty
/// </summary>
public static bool IsNullOrEmpty(this Guid guid)
{
  return (guid == Guid.Empty);
}

Şimdi someGuid.IsNullOrEmpty();ister Guid ister Guid kullanıyor olun, her durumda kullanabilirsiniz .

Dediğim gibi, bazı insanlar isimlendirmeden şikayet edecekler çünkü IsNullOrEmpty()değerin boş olabileceğini ima ediyor (mümkün olmadığında). Gerçekten istiyorsan, uzantılar için farklı bir isim bul IsNothing()ya IsInsignificant()da her neyse :)


2

IsEmpty işlevselliği eklemek için Guid'e bir uzantı yöntemi oluşturabilirsiniz:

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()aslında boş bir kılavuz yaratacaktır. Yazmayı düşündün mü g = Guid.NewGuid()?
David Hedlund

0

Diğerlerinin de belirttiği gibi, sorunun dayanağı tamamen orada değil. C # Guidboş değer atanamaz. Ancak Guid?. Bir, denetimi Temiz bir yolu Guid?olduğunu nullveya Guid.Emptysonucu olmadığını kontrol gereğidir GetValueOrDefault()olduğunu Guid.Empty. Örneğin,

Guid? id;

// some logic sets id

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

-1

Biliyorsun bu tür ifadeleri her zaman görüyorum

Guid bir değer türüdür, bu nedenle Guid türündeki bir değişken ile başlamak için boş olamaz

ancak bu sadece DOĞRU DEĞİLDİR.

Bir Guid'i programatik olarak null olarak ayarlayamazsınız, ancak bazı SQL bir UniqueIdentifier'ı çekip bir Guid'e eşlediğinde ve bu değer db'de null ise, değer C # 'da null olarak gelir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.