扩展方法中的类型推断
我确定之前已经提出过这个问题,但是我细读了类似问题的搜索并没有得出答案。扩展方法中的类型推断
我厌倦了检查Nullable是否有值。为什么我不能将myNullable<int> yourAge
分配到int myAge
,如果yourAge
为空,为什么不能分配一个异常?此外,如果我们任何一个该死的年龄都是空的,为什么我必须做一个fxning检查来避免给一个fxning SqlParameter分配'deafault'?我甚至不能做一个文明的mySqlParm = myAge.HasValue ? myAge.Value : DBNull.Value
。
可空类型的结点是什么?我们仍然必须使用'-1'作为pkId来避免可怕的Null。我们甚至无法添加我们自己的扩展方法,因为'blah blah'。
为什么即使fxning都打扰参数?为什么我们不把所有日期存储为fxning varchar(10)?
为什么我不能指定
myNullable<int>
yourAge
到int myAge
,并得到一个 异常,如果yourAge
为空?
当然可以。只需使用Value属性而不首先检查:
int myAge = yourAge.Value;
如果yourAge
包含空值,您将得到一个异常。
谢谢@Guffa,我从未想过,被其他复杂因素所蒙蔽。 – ProfK 2009-08-27 11:12:25
也许你想要做这样的事情?
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);
}
对于基于测试的示例。你应该得到赏金,但我只能在我的下一个问题上这样做。敬请关注。 :-) – ProfK 2009-08-27 11:14:04
哇,你生气 – 2009-08-26 20:11:10
什么是你的问题? Nullable与数据库有什么关系? –
2009-08-26 20:14:37
也许“在扩展方法中进行类型推断”是什么启发你写这篇文章,但它不是这篇文章的正确标题。 – 2009-08-26 20:24:07