Сегодня я обнаружил очень странное поведение при перегрузке функций 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
Странное (возможно, неправильное?) поведение компилятора C# с перегрузкой методов и перечислениями. ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Странное поведение компилятора в отношении конструкторов по умолчанию в C++
Anonymous » » в форуме C++ - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Странное поведение CLR/компилятора в режиме выпуска, но не в режиме отладки
Anonymous » » в форуме C# - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Возможно ли, что архив xcode поврежден, не сообщив мне об этом? СТРАННОЕ поведение iOS 4.x
Anonymous » » в форуме IOS - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-