超负荷解决方案的意外行为



请考虑以下代码:

static void foo(object v)
{
    System.Console.WriteLine(v.GetType());
}
static void foo(OleDbType v)
{
    System.Console.WriteLine(v.GetType());
}
static void Main(string[] args)
{
    foo(1);
    foo(0);
    foo(2);
}

输出为:

System.Int32
System.Data.OleDb.OleDbType
System.Int32

因此,foo(0)已解决为static void foo(OleDbType),其他呼叫已解决为static void foo(object)

我希望所有电话都可以解决使用相同的方法,为什么会发生这种情况?

从常数0到任何枚举类型都有隐式转换,因此foo(0)OleDbType枚举参数匹配过载。

相关内容

最新更新