Это соответствует тому, что они сделали для ключевого слова foreach
(см. Раздел 8.8.4 раздела Спецификация языка C# " Оператор foreach ").
В принципе, это утка-типизация; если тип реализует метод MoveNext
и свойство Current
, это все, что необходимо для компилятора C#, чтобы знать, как итерации через последовательность, открытую объектом.
Это также относится к инициализаторам коллекции (см. Раздел 7.6.10.3 спецификации языка C# «Инициализаторы коллекции»); единственным требованием является то, что тип реализует System.Collections .Enumerable
и используйте метод Добавить
.
При этом ждет
ключевое слово просто придерживается предшествующего прецедента, не требуя конкретных реализаций интерфейса (хотя интерфейсы предоставляют эти методы, если вы решите их использовать), просто шаблон методов, которые может распознать компилятор.