如何将null设置为GUID属性

时间:2013-12-10 17:22:30

标签: c# guid nullable

我有一个Employee类型的对象,它有一个Guid属性。我知道如果我想设置为null我必须将我的type属性定义为可空Nullable<Guid>道具或Guid?丙

但在我的情况下,我无法更改道具的类型,因此它将保留为Guid类型和我的同事,我们不想使用Guid.Empty。

有没有办法将我的属性设置为null或string.empty,以便将数据库中的字段重新设置为null。

我有一个从string.empty转换为null的机制,但如果将更改为接受空guid为null,我将更改许多内容。

请帮忙!

8 个答案:

答案 0 :(得分:45)

  

有没有办法将我的属性设置为null或string.empty,以便将数据库中的字段重新设置为null。

没有。因为它不可空。如果你希望它可以为空,你必须使用Nullable<Guid> - 如果你没有,那么让Nullable<T>开始是没有意义的。你在这里有一个基本的问题 - 你实际上已经知道了,给出了你的第一段。你已经说过,“我知道如果我想要达到A,我必须做B - 但我想在不做B的情况下达到A.”根据定义,这是不可能的

您可以获得的最接近的是使用一个特定的GUID代替空值 - Guid.Empty(在适当的情况下也可用作default(Guid),例如,对于可选参数的默认值)显而易见的候选人,但是你因为未明确的原因而拒绝了。

答案 1 :(得分:18)

Guid? myGuidVar = (Guid?)null;

可能是。不需要不必要的铸造。

Guid? myGuidVar = null;

答案 2 :(得分:9)

选择你的毒药 - 如果你不能将属性的类型改为可以为空,那么你将不得不使用“魔术”值来表示NULL。 Guid.Empty似乎与其他任何一样好,除非你有一些不想使用它的具体原因。第二个选择是Guid.Parse("ffffffff-ffff-ffff-ffff-ffffffffffff"),但这是愚蠢的笨蛋。

答案 3 :(得分:8)

由于“Guid”不可为空,因此请使用“Guid.Empty”作为默认值。

答案 4 :(得分:2)

您可以将typeof(Guid), "00000000-0000-0000-0000-000000000000"用于该属性的DefaultValue。

答案 5 :(得分:0)

你可以先使用guid变量接受null吗?运算符然后你使用Guid.Empty或使用(Guid?)null将其强制转换为null;

例如:

 Guid? id = Guid.Empty;

 Guid? id =  (Guid?)null;

答案 6 :(得分:0)

我认为这是正确的方法:

引导的= Guid.Empty;

答案 7 :(得分:0)

数据库功能的外部引导值:

    #region GUID

    public static Guid GGuid(SqlDataReader reader, string field)
    {
        try
        {
            return reader[field] == DBNull.Value ? Guid.Empty : (Guid)reader[field];
        }
        catch { return Guid.Empty; }
    }

    public static Guid GGuid(SqlDataReader reader, int ordinal = 0)
    {
        try
        {
            return reader[ordinal] == DBNull.Value ? Guid.Empty : (Guid)reader[ordinal];
        }
        catch { return Guid.Empty; }
    }

    public static Guid? NGuid(SqlDataReader reader, string field)
    {
        try
        {
            if (reader[field] == DBNull.Value) return (Guid?)null; else return (Guid)reader[field];
        }
        catch { return (Guid?)null; }
    }

    public static Guid? NGuid(SqlDataReader reader, int ordinal = 0)
    {
        try
        {
            if (reader[ordinal] == DBNull.Value) return (Guid?)null; else return (Guid)reader[ordinal];
        }
        catch { return (Guid?)null; }
    }

    #endregion