当创建一个SqlParameter
(.NET3.5)或OdbcParameter
时,我经常使用SqlParameter(string parameterName, Object value)
构造函数重载来设置一个语句中的值。SqlParameter构造函数编译器超载选择
但是,当我尝试传递一个0作为值参数时,我最初被C#编译器选中(string, OdbcType)
过载而不是(string, Object)
。
MSDN实际上在remarks section中对此遗漏提出了警告,但解释让我感到困惑。
为什么C#编译器决定应将文字0参数转换为OdbcType
而不是Object
?该警告还表示使用Convert.ToInt32(0)
来强制使用Object
过载。
它令人困惑地说,这将0转换为“对象类型”。但不是0已经是“对象类型”?该页面的Types of Literal Values部分似乎认为文字总是键入的,因此从System.Object
继承。
这种行为似乎并不直观。这可能与反方差或共方差有关吗?
谢谢,非常清楚的解释。 – Ash 2010-06-15 01:06:54