为什么不是';没有Guid.IsNullOrEmpty()方法
本文关键字:IsNullOrEmpty 方法 Guid 没有 为什么不 | 更新日期: 2023-09-27 18:28:42
这让我想知道为什么.NET中的Guid没有IsNullOrEmpty()
方法(其中空表示全零)
在编写RESTneneneba API时,我在ASP.NETMVC代码中的几个位置都需要这个。
还是我错过了什么,因为互联网上没有人要求同样的东西?
Guid
是一个值类型,因此Guid
类型的变量一开始不能为null。如果你想知道它是否与空guid相同,你可以使用:
if (guid == Guid.Empty)
首先,Guid
不可为null。您可以查看:
myGuid == default(Guid)
相当于:
myGuid == Guid.Empty
这里有一个可为null的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合作?或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(当它不能为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
}
}
正如其他人所指出的,问题的前提并不完全存在。C#Guid
不可为null。然而,Guid?
是。检查Guid?
是null
还是Guid.Empty
的一种干净方法是检查GetValueOrDefault()
的结果是否是Guid.Empty
。例如,
Guid? id;
// some logic sets id
if (Guid.Empty.Equals(guid.GetValueOrDefault()))
{
// Do something
}
这里有一个可为null的结构类型的通用扩展类:
public static class NullableExtensions
{
public static bool IsNullOrDefault<T>(this T? self) where T : struct
{
return !self.HasValue || self.Value.Equals(default(T));
}
}
你知道,我一直在中看到这样的语句
Guid是一个值类型,因此类型为Guid的变量对于从开始
但事实并非如此。
同意您不能将Guid编程设置为null,但当某些SQL引入UniqueIdentifier并将其映射到Guid时,如果该值在数据库中为null,则该值在C#中显示为null。