Странное (возможно, неправильное?) поведение компилятора C# с перегрузкой методов и перечислениями.C#

Место общения программистов C#
Ответить
Anonymous
 Странное (возможно, неправильное?) поведение компилятора C# с перегрузкой методов и перечислениями.

Сообщение Anonymous »

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


Подробнее здесь: https://stackoverflow.com/questions/315 ... oading-and
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»