为什么没有Guid.IsNullOrEmpty()方法

Gau*_*ain 95 c# asp.net-mvc

这让我想知道为什么.NET中的Guid没有IsNullOrEmpty()方法(空的意思是全零)

在编写REST API时,我需要在ASP.NET MVC代码的几个地方使用它.

或者我错过了什么,因为互联网上没有人要求同样的东西?

Jon*_*eet 223

Guid是一个值类型,因此类型的变量Guid不能为空.如果你想知道它是否与空guid相同,你可以使用:

if (guid == Guid.Empty)
Run Code Online (Sandbox Code Playgroud)

  • @goths:然后你可以使用`if(nullableGuid == null || nullableGuid == Guid.Empty)`...或者如你真的想要创建自己的扩展方法.据推测,它很少出现,对大多数人来说都不值得. (5认同)
  • @goths您可以为所有值类型创建一般扩展方法.例如:`public static bool IsNullOrDefault <T>(this T?self)其中T:struct {return!self.HasValue || self.Value.Equals(默认(T)); }` (2认同)

Dav*_*und 25

一方面,Guid不可空.你可以查一下:

myGuid == default(Guid)
Run Code Online (Sandbox Code Playgroud)

这相当于:

myGuid == Guid.Empty
Run Code Online (Sandbox Code Playgroud)

  • 从c#7.1开始,您可以只使用`myGuid == default`。 (2认同)

Jus*_*tin 9

这是一个可以为空的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);
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

如果你真的想在任何地方使用它,你可以为常规Guid编写另一种扩展方法.它永远不会是空的,所以有些人不会喜欢这个...但它符合您的目的而且您不必知道您是否正在使用Guid?或Guid(很适合重新分解等).

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

现在你可以someGuid.IsNullOrEmpty();在所有情况下使用,无论你使用的是Guid还是Guid?

就像我说的,有些人会抱怨命名,因为IsNullOrEmpty()暗示值可以为null(当它不能时).如果你真的想,拿出一个不同的名称,如扩展IsNothing()IsInsignificant()或任何:)