重载解析时出现意外行为

时间:2016-06-20 15:29:20

标签: c# .net overloading

请考虑以下代码:

$scope.cases.push({key: dataSnapshot.key,
                                 volunteer_name: dataSnapshot.val().volunteer_name,
                                 volunteer_email: dataSnapshot.val().volunteer_email,
                                 title: dataSnapshot.val().title,
                                 creationdate: '',//(new Date(dataSnapshot.val().creationdate)).toString(),
                                 snapshot: dataSnapshot.val().snapshot,
                                 message: dataSnapshot.val().message});

$scope.digest();

输出结果为:

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)

我希望所有的调用都能解析为同一个方法,为什么会这样?

1 个答案:

答案 0 :(得分:0)

存在从常量0到任何枚举类型的隐式转换,因此foo(0)将重载与OleDbType枚举参数匹配。