Надеюсь, я не захлопнувшись за то, что вы задали что-то такое основное. Я мог ответить Google, но я хочу услышать что-то, что не из учебника.Перечислите набор IDictionary.Keys, который является ICollection <T>
Я пишу блок-тест, чтобы проверить, что мои ключи IDictionary
являются последовательными.
Поскольку свойство Keys
является ICollection<T>
, я хочу перечислить коллекцию и распечатать значения ключа на консоли.
При попытке печати значений ключа с помощью простого for
цикла:
for (int i = 0; i < unPivotedData.Count; i++)
{
Console.WriteLine(unPivotedData.Keys[i]);
}
я получил следующую компиляции ошибка:
Cannot apply indexing with [] to an expression of type 'System.Collections.Generic.ICollection<int>'
Однако, когда я использовал foreach
цикл:
foreach(int key in unPivotedData.Keys)
{
Console.WriteLine(key);
}
Все работало нормально.
Я понимаю, что делает индексатор и как оно реализовано, но как работает foreach
? Я не понимаю, как может работать foreach
, но for
приводит к ошибке компилятора.
Я пропустил фундаментальное перечисление здесь?
Cheers!
EDIT: Кроме того, есть ли разница в производительности между двумя? Я знаю, что не могу использовать for
с IDictionary, но если я использую IList, я могу. Имеет ли for
двигаться быстрее, чем foreach
или прирост производительности незначителен