Реализуйте IEnumerable <T> для обертки списка

современный Дизайн C++, блестящая платформа книги и шаблона разработки Alexandrescu. Word предупреждения, после чтения этой книги я прекратил делать C++ и думал, "Какого черта, я могу просто выбрать лучший язык и получить его бесплатно".

10
задан Graviton 12 December 2009 в 08:28
поделиться

2 ответа

Если вы реализуете ICollection , вы получите желаемую функциональность.

Исправление: вам фактически нужно реализовать только IEnumerable или ] IEnumerable и иметь общедоступный метод Add в вашем классе:

public class Wrapper : IEnumerable<int>
{
    public List<int> TList
    { get; private set; }
    public Wrapper()
    {
        TList = new List<int>();
    }

    public void Add(int item)
    {
        TList.Add(item);
    }
    public IEnumerator<int> GetEnumerator()
    {
        return TList.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

(Я также взял на себя смелость сделать установщик TList закрытым; обычно рекомендуется свойства этого типа коллекции доступны только для чтения, поэтому коллекцию как таковую нельзя заменить никаким кодом за пределами типа.)

33
ответ дан 3 December 2019 в 13:44
поделиться

Чтобы получить инициализаторы коллекций, вам нужно сделать 2 вещи:

  1. Реализовать IEnumerable
  2. Иметь метод под названием Add с правильной подписью

Предпочтительный способ получить это: для реализации ICollection, но минимум, который вам нужно сделать, это:

public class Wrapper : IEnumerable<int>
{
    public List<int> TList
    {get;set;}

    public IEnumerator<int> GetEnumerator()
    {
        return TList.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator() // Explicitly implement the non-generic version.
    {
        return TList.GetEnumerator();
    }

    public void Add(int i)
    {
         TList.Add(i);
    }

    public Wrapper()
    {
        TList=new List<int>();
    }
}
9
ответ дан 3 December 2019 в 13:44
поделиться
Другие вопросы по тегам:

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