пятница, 30 марта 2012 г.

Нашел баг на работе, лог выводился неправильно, вместо списка типа "1,2,3,4,5," выводилось "System.Collections.Generic.List`1[System.UInt32]". Оказалось что function overload resolution в C# работает не так как я мог себе подумать.

void foo<T>(T v)
{
...
}
void foo<T>(IEnumerable<T> v)
{
...
}

void f()
{
List<int> list = new List<int>();

foo(list);
}

Вот в таком коде вызывается первая!, а не вторая функция