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


Answers:


236

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

if (guid == Guid.Empty)

实体框架将Guid变量定义为Guid的情况如何?(可以为空)?
Gautam Jain 2012年

6
@goths:然后,您可以使用if (nullableGuid == null || nullableGuid == Guid.Empty)...或根据需要创建自己的扩展方法。大概它很少出现,对大多数人来说不值得。
乔恩·斯基特

2
@goths您可以为所有值类型创建通用扩展方法。例如:public static bool IsNullOrDefault<T>(this T? self) where T : struct { return !self.HasValue || self.Value.Equals(default(T)); }
Jeppe Stig Nielsen

27

一方面,Guid不为空。您可以检查:

myGuid == default(Guid)

等效于:

myGuid == Guid.Empty

2
从c#7.1开始,您可以使用myGuid == default
Brad M,

10

这是可为空的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():)


2

您可以对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()吗?
David Hedlund 2012年

0

正如其他人指出的那样,问题的前提并不仅限于此。C#Guid不可为空。但是Guid?是。一种检查a Guid?nullGuid.Emptyis的干净方法,即检查结果是否GetValueOrDefault()Guid.Empty。例如,

Guid? id;

// some logic sets id

if (Guid.Empty.Equals(guid.GetValueOrDefault()))
{
    // Do something
}

-1

你知道我一直都在看这样的陈述

Guid是一个值类型,因此Guid类型的变量开头不能为null

但这不是真的。

同意您不能以编程方式将Guid设置为null,但是当某些SQL提取UniqueIdentifier并将其映射到Guid时,如果该值在db中为null,则在C#中该值显示为null。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.