代码之家  ›  专栏  ›  技术社区  ›  Ash

SqlParameter构造函数编译器重载选择

  •  1
  • Ash  · 技术社区  · 14 年前

    SqlParameter (.NET3.5)或 OdbcParameter ,我经常使用 SqlParameter(string parameterName, Object value)

    但是,当我尝试传递一个文本0作为value参数时,我最初被选择 (string, OdbcType) (string, Object) .

    MSDN实际上是在警告这个问题 remarks section

    OdbcType 而不是 Object Convert.ToInt32(0) 迫使 要使用的过载。

    Types of Literal Values System.Object .

    这种行为似乎不是很直观。这可能与反方差或协方差有关吗?

    2 回复  |  直到 13 年前
        1
  •  2
  •   Randy Levy    14 年前

    根据 C# Language Specification 4.0 :

    文字0隐式转换为


    所以呢 SqlParameter("parameterName", 0) SqlParameter(string, OdbcType) 超载。

    如果你改成 SqlParameter("parameterName", 1) 它决定于 SqlParameter(string, object) 超载。同样的逻辑也适用于 Convert.ToInt32 .

        2
  •  1
  •   leppie    14 年前