如何将 GUID 属性设置为 null

问题描述 投票:0回答:9

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

Nullable<Guid>
prop 或 Guid?道具。

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

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

我有一个从 string.empty 转换为 null 的机制,但如果要更改为接受空 guid 为 null,我会更改很多东西。

请帮忙!

c# guid nullable
9个回答
87
投票

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

不。因为它是不可空的。如果您希望它可以为空,则必须使用

Nullable<Guid>
- 如果不这样做,则一开始就没有必要使用
Nullable<T>
。你在这里遇到了一个“基本”问题 - 鉴于你的第一段,你实际上已经知道了。你说过,“我知道如果我想实现 A,我必须做 B - 但我想实现 A 而不做 B。”这是不可能的根据定义 您能得到的最接近的是使用一个特定的 GUID 来代表空值 -

Guid.Empty

(在适当的情况下也可用作

default(Guid)
,例如可选参数的默认值)是明显的候选者,但一个您因不明原因拒绝了。
    


37
投票
可能是这样。不需要不必要的铸造。

Guid? myGuidVar = null;



24
投票


9
投票
Guid.Empty

看起来和其他的一样好,除非你有一些特定的原因不想使用它。第二个选择是

Guid.Parse("ffffffff-ffff-ffff-ffff-ffffffffffff")
但恕我直言,这更难看。
    


8
投票
typeof(Guid), "00000000-0000-0000-0000-000000000000"

作为属性的 DefaultValue。

    


3
投票

例如:

Guid? id = Guid.Empty;

Guid? id = (Guid?)null;



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



0
投票

Guid 已提交 = Guid.Empty;


0
投票

SqlCommand cmdCust = new SqlCommand("MyProc", myConn); cmdCust.Parameters.Add("@CustID", SqlDbType.UniqueIdentifier).Value = DBNull.Value;

© www.soinside.com 2019 - 2024. All rights reserved.