Почему нет Guid.IsNullOrEmpty() метод


Это заставляет меня задаться вопросом, почему Guid в .NET не имеет IsNullOrEmpty() метод (где пустой означает все нули)

мне это нужно в нескольких местах в моем ASP.NET MVC код при написании REST API.

или я что-то упустил, потому что никто в Интернете не просил то же самое?

4 73

4 ответа:

Guid это тип значения, так что переменная типа Guid не может быть null для начала. Если вы хотите знать, если это то же самое, что и пустой guid, вы можете просто использовать:

if (guid == Guid.Empty)

в одном Guid не может быть null. Вы можете проверить:

myGuid == default(Guid)

что эквивалентно:

myGuid == Guid.Empty

вот простой метод расширения для Nullable 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. Он никогда не может быть нулевым, поэтому некоторым людям это не понравится... но он служит той цели, которую вы ищете, и вам не нужно знать, работаете ли вы с Guid? или Guid (хороший для повторного факторинга и т. д.).

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

теперь вы можете использовать someGuid.IsNullOrEmpty(); in всех случаях, если вы используете идентификатор или 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
    }
}