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

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

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

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

Ответ 1

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

if (guid == Guid.Empty)

Ответ 2

С одной стороны, Guid не имеет значения NULL. Вы можете проверить:

myGuid == default(Guid)

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

myGuid == Guid.Empty

Ответ 3

Вот простой метод расширения для NULL.

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

UPDATE

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

Ответ 4

Вы можете сделать метод расширения для 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
    }
}

Ответ 5

Вы знаете, я вижу это утверждение, как это все время

Guid является типом значения, поэтому переменная типа Guid не может иметь значение null для начала

но это просто не правда.

Согласитесь, вы не можете программно установить Guid в значение NULL, но когда какой-то SQL извлекает UniqueIdentifier и отображает его в Guid, и если это значение равно нулю в БД, в С# это значение равно нулю.