Здравствуйте, Sinclair, Вы писали:
_>>Кроме очевидных исключений типа
_>>_>>IEnumerable<T>: IEnumerable
_>>
S>Вот как раз это исключение мне кажется максимально неочевидным. Именно это наследование стоило бы выкинуть к хренам, т.к. при наличии генерикового IEnumerable обычный только путается под ногами.
S>Так что это — не пример удачной иерархии интерфейсов, а компромисс между "хотим сделать удобный интерфейс для современных языков" и "боимся, что за нами не успеют авторы устаревших языков".
S>Сейчас IEnumerable — это ненужное legacy. Если бы у MS были средства на выпуск сразу второй версии дотнет, то этого ужаса бы нам не потребовалось.
IEnumerable позволяет избавиться от рефлексии когда нужно привести тип к IEnumerable в каком то общем методе вместо
while (objType!=null && objType != typeof(object))
{
if (objType.IsGenericType &&
objType.GetGenericTypeDefinition() == typeof(IEnumerable<>))
return true;
objType = objType.BaseType;
}