49

引用this question的答案。

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

如果我看到这个怎么办?

public Nullable<System.Guid> SomeProperty { get; set; }

我应该如何检查这是否为空?像这样?

(SomeProperty == null)

还是这样?

(SomeProperty == Guid.Empty)
4

7 回答 7

107

如果你想确定你需要同时检查

SomeProperty == null || SomeProperty == Guid.Empty

因为它可以是 null 'Nullable' 并且它可以是一个空的 GUID,例如 {00000000-0000-0000-0000-000000000000}

于 2013-07-17T07:55:10.960 回答
28

SomeProperty.HasValue我认为这就是您要寻找的。

请参阅 DevDave 或 Sir l33tname 的答案。

编辑:顺便说一句,你可以写System.Guid?而不是Nullable<System.Guid>;)

于 2013-07-17T07:52:05.423 回答
17

请注意,HasValue将为空返回 true Guid

bool validGuid = SomeProperty.HasValue && SomeProperty != Guid.Empty;

于 2013-09-03T15:56:18.587 回答
4

查看Nullable<T>.HasValue

if(!SomeProperty.HasValue ||SomeProperty.Value == Guid.Empty)
{
 //not valid GUID
}
else
{
 //Valid GUID
}
于 2013-07-17T07:56:00.333 回答
3

从 C# 7.1 开始,当编译器可以推断表达式类型时,您可以使用默认文字来生成类型的默认值。

Console.Writeline(default(Guid));  
   // ouptut: 00000000-0000-0000-0000-000000000000

Console.WriteLine(default(int));  // output: 0

Console.WriteLine(default(object) is null);  // output: True

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/default

于 2020-05-31T10:48:42.557 回答
2

您应该使用以下HasValue属性:

SomeProperty.HasValue

例如:

if (SomeProperty.HasValue)
{
    // Do Something
}
else
{
    // Do Something Else
}

供参考

public Nullable<System.Guid> SomeProperty { get; set; }

相当于:

public System.Guid? SomeProperty { get; set; }

MSDN 参考:http: //msdn.microsoft.com/en-us/library/sksw8094.aspx

于 2013-07-17T07:53:35.990 回答
1

您可以创建扩展方法来验证 GUID。

public static class Validate
{
    public static void HasValue(this Guid identity)
    {
        if (identity ==  null || identity == Guid.Empty)
            throw new Exception("The GUID needs a value");
    }
}

并使用扩展

    public static void Test()
    {
        var newguid = Guid.NewGuid();

        newguid.HasValue();
    }
于 2021-05-26T10:51:35.063 回答