сегодня я обнаружил очень странное поведение при перегрузке функции С#. Проблема возникает, когда у меня есть метод с 2 перегрузками, один принимающий объект и другой принимающий Enum любого типа. Когда я передаю 0 в качестве параметра, вызывается версия метода Enum. Когда я использую любое другое целочисленное значение, вызывается версия Object. Я знаю, что это можно легко устранить, используя явное кастинг, но я хочу знать, почему компилятор ведет себя таким образом. Является ли это ошибкой или каким-то странным языком, о котором я не знаю?
В приведенном ниже коде объясняется проблема (проверяется с runtime 2.0.50727)
Спасибо за любую помощь по этому поводу, Grzegorz Kyc
class Program
{
enum Bar
{
Value1,
Value2,
Value3
}
static void Main(string[] args)
{
Foo(0);
Foo(1);
Console.ReadLine();
}
static void Foo(object a)
{
Console.WriteLine("object");
}
static void Foo(Bar a)
{
Console.WriteLine("enum");
}
}