Я могу иметь метод, возвращаясь IEnumerator <T> и использовать его в цикле foreach?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

20
задан Vitor Guerreiro 22 October 2015 в 03:07
поделиться

4 ответа

Как компилятор говорит Вам, необходимо изменить тип возврата на IEnumerable. Именно так синтаксис возврата урожая работает.

14
ответ дан 30 November 2019 в 00:44
поделиться

Просто для уточнения

private static IEnumerator<TextBox> FindTextBoxes(Control rootControl)

Изменения в

private static IEnumerable<TextBox> FindTextBoxes(Control rootControl)

, Который должен быть всеми :-)

10
ответ дан 30 November 2019 в 00:44
поделиться

При возврате IEnumerator это будет другой объект перечислителя каждый раз вызов, что метод (действующий, как будто Вы сбрасываете перечислитель на каждом повторении). При возврате IEnumerable затем, foreach может перечислить на основе метода с оператором урожая.

3
ответ дан 30 November 2019 в 00:44
поделиться
// Generic function that gets all child controls of a certain type, 
// returned in a List collection
private static List<T> GetChildTextBoxes<T>(Control ctrl) where T : Control{
    List<T> tbs = new List<T>();
    foreach (Control c in ctrl.Controls) {
        // If c is of type T, add it to the collection
        if (c is T) { 
            tbs.Add((T)c);
        }
    }
    return tbs;
}

private static void SetChildTextBoxesHeight(Control ctrl, int height) {
    foreach (TextBox t in GetChildTextBoxes<TextBox>(ctrl)) {
        t.Height = height;
    }
}
1
ответ дан 30 November 2019 в 00:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: