Как я могу добавить в класс, как это, чтобы я мог цикл foreach? - PullRequest
0 голосов
/ 13 ноября 2010

Я хочу иметь возможность перебрать все строки в простом классе, то есть сделать следующее:

FormDebugMetrics debugMetrics = new FormDebugMetrics();
foreach(string d in debugMetrics)
    {
        if (!string.IsNullOrEmpty(d) {..}
    }

По моему классу это так (без публичного определения для GetEnumerator:

 public class FormDebugMetrics
    {
        public string DebugMetrics_Top { get; set; }
        public string DebugMetrics_Bottom { get; set; }
        public string DebugMetrics_Bottom { get; set; }
    }

Как это можно сделать? Как-нибудь добавить счетчик?

Ответы [ 3 ]

3 голосов
/ 13 ноября 2010

Вот один из способов:

public class FormDebugMetrics : IEnumerable<string> {
    // details elided

    public string DebugMetrics_Top { get; set; }
    public string DebugMetrics_Middle { get; set; }
    public string DebugMetrics_Bottom { get; set; }

    public IEnumerator<string> GetEnumerator() {
        yield return this.DebugMetrics_Top;
        yield return this.DebugMetrics_Middle;
        yield return this.DebugMetrics_Bottom;
    }

    IEnumerator IEnumerator.GetEnumerator() {
        return GetEnumerator();
    }
}

Тем не менее, я ставлю под сомнение ваш дизайн. Без контекста неясно, подходит ли это.

1 голос
/ 13 ноября 2010

Вам нужно либо использовать рефлексию, либо использовать другой подход.Я бы хотел использовать словарь вместо отражения.

0 голосов
/ 13 ноября 2010

не может.По крайней мере, не так просто.Вы можете добавить метод GetEnumerator или обернуть его в другой класс, который знает, как это сделать.

Вы также можете сделать это с помощью Reflection или с помощью динамических функций C # 4.0, но я действительно очень предупреждаю об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...