我有一个Employee类型的对象,它有一个Guid属性。我知道如果我想设置为null我必须将我的type属性定义为可空Nullable<Guid>
道具或Guid?丙
但在我的情况下,我无法更改道具的类型,因此它将保留为Guid类型和我的同事,我们不想使用Guid.Empty。
有没有办法将我的属性设置为null或string.empty,以便将数据库中的字段重新设置为null。
我有一个从string.empty转换为null的机制,但如果将更改为接受空guid为null,我将更改许多内容。
请帮忙!
答案 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