这让我想知道为什么.NET中的Guid没有IsNullOrEmpty()
方法(其中空表示全零)
编写REST API时,我需要在ASP.NET MVC代码中的多个位置使用它。
还是我错过了某些东西,因为互联网上没有人要求相同?
这让我想知道为什么.NET中的Guid没有IsNullOrEmpty()
方法(其中空表示全零)
编写REST API时,我需要在ASP.NET MVC代码中的多个位置使用它。
还是我错过了某些东西,因为互联网上没有人要求相同?
Answers:
if (nullableGuid == null || nullableGuid == Guid.Empty)
...或根据需要创建自己的扩展方法。大概它很少出现,对大多数人来说不值得。
public static bool IsNullOrDefault<T>(this T? self) where T : struct { return !self.HasValue || self.Value.Equals(default(T)); }
这是可为空的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编写另一种扩展方法。它永远不能为null,因此有些人不会喜欢它……但是它可以满足您寻找的目的,您不必知道您是否与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()
暗示该值可以为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
}
}
g = new Guid()
实际上会创建一个空的Guid。你打算写g = Guid.NewGuid()
吗?
Guid.Empty