Страницы

Поиск по вопросам

пятница, 14 декабря 2018 г.

C# вопрос по преобразованию

Есть класс, реализующий интерфейс IEnumerable
class MyClass : IEnumerable { public IEnumerator GetEnumerator() { for(int i = 0; i < 100; i++) { yield return i; } }
IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)this).GetEnumerator(); //всё хорошо return (IEnumerable)this.GetEnumerator(); //error; }
Почему первый вариант компилятор принимает, а второй подчеркивает, что такая запись недопустима, если, по идеи, оба эти записи являются операциями преобразования?


Ответ

Потому что он думает, что Вы хотите переменную типа IEnumerable преобразовать в IEnumerator. То есть расценивает это как попытку вызвать this.GetEnumerator(), преобразовать реультат в IEnumerable (явным кастом) и вернуть как IEnumerator (неявным кастом) - тип возвращаемого значения, объявленный в декларации метода. Просто:
return this.GetEnumerator();

Комментариев нет:

Отправить комментарий