Метод перегрузки разрешает неожиданное поведение

Я борюсь со странным, по крайней мере для меня, методом перегрузки разрешением .net. Я'Мы написали небольшой образец, чтобы воспроизвести проблему:

class Program
{
    static void Main(string[] args)
    {
        var test = new OverloadTest();
        test.Execute(0);
        test.Execute(1);

        Console.ReadLine();
    }
}

public class OverloadTest
{
    public void Execute(object value)
    {
        Console.WriteLine("object overload: {0}", value);
    }

    public void Execute(MyEnum value)
    {
        Console.WriteLine("enum overload: {0}", value);
    }
}

public enum MyEnum
{ 
    First = 1, Second = 2, Third = 3
}

Распечатает:

enum overload: 0
object overload: 1

В основном вызванная перегрузка отличается в зависимости от значения (0, 1) вместо заданного типа данных.

Может кто-нибудь объяснить?

Обновить

Я должен был указать, что тамразличное поведение между C # 2 и C # 3

Do((long)0) => object overload //C# 2
Do((long)0) => enum overload   //C# 3 

Ответы на вопрос(3)

Ваш ответ на вопрос