сегодня я обнаружил очень странное поведение с перегрузкой функций С#. Проблема возникает, когда у меня есть метод с двумя перегрузками: один принимает Object, а другой принимает Enum любого типа. Когда я передаю 0 в качестве параметра, вызывается версия метода Enum. Когда я использую любое другое целочисленное значение, вызывается версия объекта. Я знаю, что это можно легко исправить с помощью явного приведения типов, но я хочу знать, почему компилятор ведет себя таким образом. Это ошибка или просто какое-то странное языковое правило, о котором я не знаю?
Код ниже объясняет проблему (проверено на среде выполнения 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");
}
}
0
. - person jball   schedule 01.07.2010