我有一个 Employee 类型的对象,它有一个 Guid 属性。我知道如果我想设置为 null,我必须将我的类型属性定义为可空
Nullable<Guid>
prop 或 Guid?道具。
但就我而言,我无法更改道具的类型,因此它将保留为 Guid 类型,而我和我的同事我们不想使用 Guid.Empty。
有没有办法将我的属性设置为 null 或 string.empty,以便将数据库中的字段重新建立为 null。
我有一个从 string.empty 转换为 null 的机制,但如果要更改为接受空 guid 为 null,我会更改很多东西。
请帮忙!
有没有办法将我的属性设置为 null 或 string.empty,以便将数据库中的字段重新建立为 null。
不。因为它是不可空的。如果您希望它可以为空,则必须使用
Nullable<Guid>
- 如果不这样做,则一开始就没有必要使用 Nullable<T>
。你在这里遇到了一个“基本”问题 - 鉴于你的第一段,你实际上已经知道了。你说过,“我知道如果我想实现 A,我必须做 B - 但我想实现 A 而不做 B。”这是不可能的根据定义。
您能得到的最接近的是使用一个特定的 GUID 来代表空值 - Guid.Empty
(在适当的情况下也可用作
default(Guid)
,例如可选参数的默认值)是明显的候选者,但一个您因不明原因拒绝了。可能是这样。不需要不必要的铸造。
Guid? myGuidVar = null;
Guid.Empty
看起来和其他的一样好,除非你有一些特定的原因不想使用它。第二个选择是
Guid.Parse("ffffffff-ffff-ffff-ffff-ffffffffffff")
但恕我直言,这更难看。typeof(Guid), "00000000-0000-0000-0000-000000000000"
作为属性的 DefaultValue。
例如:
Guid? id = Guid.Empty;
或
Guid? id = (Guid?)null;
#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
Guid 已提交 = Guid.Empty;
SqlCommand cmdCust = new SqlCommand("MyProc", myConn);
cmdCust.Parameters.Add("@CustID", SqlDbType.UniqueIdentifier).Value = DBNull.Value;