我确信之前已经提出过这个问题,但我仔细阅读了类似问题的搜索内容并未得出答案。
我已经厌倦了检查Nullable是否有值。为什么我无法将myNullable<int> yourAge
分配给int myAge
并在yourAge
为空时获得异常?此外,如果我们的任何一个年龄都为空,为什么我必须进行fxning检查以避免将'deafault'分配给fxning SqlParameter?我甚至不能做一个文明的mySqlParm = myAge.HasValue ? myAge.Value : DBNull.Value
。
可空类型的固定点是什么?我们仍然必须使用'-1'来表示pkId以避免可怕的Null。我们甚至不能添加我们自己的扩展menthods因为'等等'。
为什么甚至fxning都打扰参数?为什么我们不将所有日期存储为fxning varchar(10)?
答案 0 :(得分:6)
为什么我不能分配
myNullable<int>
yourAge
到int myAge
并获得 如果yourAge
为空,则会出现异常吗?
当然可以。只需使用Value属性而不先检查:
int myAge = yourAge.Value;
如果yourAge
包含null,您将收到异常。
答案 1 :(得分:3)
也许你想做这样的事情?
public static object GetDatabaseValueFromNullableType<T>(this T? value)
where T: struct
{
return value.HasValue ? (object) value.Value : DBNull.Value;
}
然后你可以像这样使用它:
//this is just a test I wrote but you get the idea
[Test]
public void NullableTest()
{
int? something = null;
var value = something.GetDatabaseValueFromNullableType();
Assert.IsTrue(value == DBNull.Value);
}