Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
212 / 210 / 137
Регистрация: 21.12.2015
Сообщений: 545
1

Непонятный момент с IEnumerable

21.01.2017, 00:34. Показов 716. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
как это объяснить? неявное наследование от IEnumerable?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections;
class SColl//не наследуемся от IEnumerable 
{
    int[] arr = {1,2,3};
    public IEnumerator GetEnumerator() //если изменить имя, то все поломается
    {
        return arr.GetEnumerator();
    }
}
 
class Program
{
    public static void Main()
    {
        SColl s = new SColl();      
        foreach (int i in s) Console.WriteLine(i);//работает
        Console.ReadKey(true);
    }
}
Добавлено через 11 минут
всё, разобрался. Это называется "утиная типизация"
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.01.2017, 00:34
Ответы с готовыми решениями:

Поясните непонятный момент, почему так?
Приветствую всех, вот решал и решил задачу, подсмотрел немного на форуме, и вот что я делаю в коде....

Проверить корректность реализации IEnumerable<T> и IEnumerable
Гуру, выручайте! Разбираюсь в создании обобщенной коллекции и запутался в том, как реализовать...

Зачем IEnumerable наследоваться от IEnumerable<T>?
/* * Created by SharpDevelop. * User: Admin * Date: 07.09.2018 * Time: 17:26 * * To...

Непонятный момент
Здравствуйте.Возник вопрос в задачке.У нас замкнутый контур,в котором батарейка с определенным...

1
Эксперт .NET
17689 / 12874 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
21.01.2017, 01:01 2
Цитата Сообщение от TuM0xA Посмотреть сообщение
как это объяснить? неявное наследование от IEnumerable?
Раздел 8.8.4 спецификации языка — там описано что необходимо для того, чтобы класс можно было использовать как перечисление в foreach.
В частности, если класс не реализует интерфейс IEnumerable/IEnumerable<T>, но в классе имеется метод GetEnumerator, который не принимает никаких значений и возвращает структуру или ссылку на объект, в котором имеется свойство с геттером Current и метод MoveNext, не принимающий значений и возвращающий bool, то экземпляр данного класса можно использовать как перечисление в foreach.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Foo
{
   public Bar GetEnumerator()
   {
      return new Bar();
   }
}
 
struct Bar
{
   public string Current { get { return "Hello!"; } }
 
   private bool moveNext = true;
   public bool MoveNext()
   {
      var t = moveNext;
      moveNext = false;
 
      return t;
   }
}
 
var foo = new Foo();
foreach (var x in foo)
   Console.WriteLine(x);
2
21.01.2017, 01:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2017, 01:01
Помогаю со студенческими работами здесь

Непонятный момент, замыкания
Почему в замыкании var collectContainer = function () { var food = 'макароны'; ...

Непонятный момент с комплексными матрицами
Вот задание: Комплексная матрица Z представляется парой X, Y действительных матриц так, что...

Непонятный момент в программе с указателями
Для вывода строки по элементам была написана программа, в которой применялся указатель #include...

Непонятный момент в книге Шилдта
Прощу прощения если что-то не туда пишу, в общем читаю книгу и не могу понять как работает данный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru