Ответ 1
Guid
- это тип значения, поэтому переменная типа Guid
не может начинаться с нуля. Если вы хотите знать, совпадает ли это с пустым директором, вы можете просто использовать:
if (guid == Guid.Empty)
Это заставляет меня задаваться вопросом, почему Guid в .NET не имеет метода IsNullOrEmpty()
(где empty означает все нули)
Мне нужно это в нескольких местах моего кода ASP.NET MVC при написании REST API.
Или я что-то пропустил, потому что никто в Интернете не просил об этом?
Guid
- это тип значения, поэтому переменная типа Guid
не может начинаться с нуля. Если вы хотите знать, совпадает ли это с пустым директором, вы можете просто использовать:
if (guid == Guid.Empty)
С одной стороны, Guid
не имеет значения NULL. Вы можете проверить:
myGuid == default(Guid)
что эквивалентно:
myGuid == Guid.Empty
Вот простой метод расширения для 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()
или что-то еще:)
Вы можете сделать метод расширения для 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
}
}
Вы знаете, я вижу это утверждение, как это все время
Guid является типом значения, поэтому переменная типа Guid не может иметь значение null для начала
но это просто не правда.
Согласитесь, вы не можете программно установить Guid в значение NULL, но когда какой-то SQL извлекает UniqueIdentifier и отображает его в Guid, и если это значение равно нулю в БД, в С# это значение равно нулю.