扩展方法中的类型推断

时间:2009-08-26 20:08:16

标签: .net nullable

我确信之前已经提出过这个问题,但我仔细阅读了类似问题的搜索内容并未得出答案。

我已经厌倦了检查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)?

2 个答案:

答案 0 :(得分:6)

  

为什么我不能分配myNullable<int>   yourAgeint 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);
}
相关问题