Как я реализую IEnumerable?

У меня есть класс, который содержит статическое количество объектов. Этот класс должен часто 'сравниваться' с другими классами, которые будут простыми Объектами списка.

public partial class Sheet
{
 public Item X{ get; set; }
 public Item Y{ get; set; }
 public Item Z{ get; set; }
}

объекты, очевидно, не собираются быть "X" "Y" "Z", это - просто родовые названия, например. Проблема состоит в том, что из-за природы какой потребности быть сделанным, Список не будет работать; даже при том, что все в здесь будет Объекта типа. Это похоже на контрольный список очень определенных вещей, который должен быть протестирован против и в коде и во времени выполнения.

Это работает весь штраф и хорошо; это не моя проблема. Моя проблема выполняет итерации его. Например, я хочу сделать следующее...

List<Item> UncheckedItems = // Repository Logic Here.

UncheckedItems содержит все доступные объекты; и CheckedItems является экземпляром класса Листа. CheckedItems будет содержать объекты, которые были перемещены от Непроверенного до Проверенного; однако из-за природы системы хранения, объекты, перемещенные в Проверенный, не МОГУТ быть УДАЛЕНЫ из Непроверенного. Я просто хочу выполнить итерации через "Проверенный" и удалить что-либо из списка в Непроверенном, который уже находится в "Проверенном".

Так естественно это пошло бы как это с нормальным списком.

foreach(Item item in Unchecked)
{
 if( Checked.Contains(item) )
 Unchecked.Remove( item );
}

Но так как "Листом" не является 'Список', я не могу сделать этого. Таким образом, я хотел реализовать IEnumerable так, чтобы я мог. Какие-либо предложения? Я никогда не реализовывал IEnumerable непосредственно прежде, и я довольно смущен как, туда, где начать.

5
задан ChaosPandion 7 May 2010 в 14:53
поделиться

1 ответ

Вам нужно создать итератор, который возвращает элементы, находящиеся в листе.

Использование итераторов

public partial class Sheet
{
    public Item X{ get; set; }
    public Item Y{ get; set; }
    public Item Z{ get; set; }

    public IEnumerable<Item> EnumerateItems()
    {
        yield return X;
        yield return Y;
        yield return Z;
        // ...
    }
}

Если вы не хотите вызывать метод, вы можете сделать следующее.

public partial class Sheet : IEnumerable<Item>
{
    public Item X{ get; set; }
    public Item Y{ get; set; }
    public Item Z{ get; set; }

    public IEnumerator<Item> GetEnumerator()
    {
        yield return X;
        yield return Y;
        yield return Z;
        // ...
    }

    IEnumerator IEnumerator.GetEnumerator()
    {
        return GetEnumerator();
    }
}
12
ответ дан 13 December 2019 в 05:31
поделиться
Другие вопросы по тегам:

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