C #, objectCollection.OfType ( ) и foreach (элемент T в objectCollection), от IEnumerable до IEnumerable

Моему личному стилю кодирования принадлежит Enumerable.OfType () . Я использую его везде, это имеет смысл. В частности, IEnumerable допускает мощную функциональность linqToObject. Я ненавижу "небезопасный для типов" цикл ObjectCollections, такой как примеры ниже. Теперь у меня есть несколько вопросов о цикле по этим "UnGenericCollections".

Вопрос 1: Если я конвертирую этот ArrayList] в [11 11146341] Enumerable Насколько велик дополнительный цикл по сравнению с простыми проверками foreach / if?

var ark = new ArrayList();
ark.Add(new Human());
ark.Add(new Human());
ark.Add(new Animal());

Вместо:

foreach (object passenger in ark)
{
    if (passanger is Human) { }
    if (passanger is Animal) { }
}

я использую:

foreach (var human in ark.OfType())
{
}

foreach (var animal in ark.OfType())
{
}

Вопрос 2: Какой способ приведения / преобразования будет использоваться во время цикла foreach в переменную другого типа? Это языковая функция или она работает "из коробки"?

foreach (Human human in ark) { }

Спасибо, что терпели мой ужасный английский. С уважением, Бенджамин

6
задан benwasd 19 May 2011 в 19:25
поделиться