Почему нет метода Guid.IsNullOrEmpty () - PullRequest
90 голосов
/ 23 марта 2012

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

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

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

Ответы [ 5 ]

214 голосов
/ 23 марта 2012

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

if (guid == Guid.Empty)
25 голосов
/ 23 марта 2012

С одной стороны, Guid не обнуляется. Вы можете проверить:

myGuid == default(Guid)

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

myGuid == Guid.Empty
9 голосов
/ 07 мая 2013

Вот простой метод расширения для обнуляемого 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 (хорошо для ре-факторинга и т. д.).

/// <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() или что-то еще:)

2 голосов
/ 23 марта 2012

Вы можете создать метод расширения для 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
    }
}
0 голосов
/ 16 мая 2019

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

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

но это просто НЕ ИСТИНА.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...