Пользовательский набор, реализовывая IEnumerable

Я знаю, что технически, Интерфейс используется для чтения и не записи или редактирования однако, я хочу добавить добавление и функцию addrange к следующему классу, вот то, что я в настоящее время имею, который не работает

public class HrefCollection : IEnumerable<Href> 
{
    private IEnumerable<Href> hrefs;

    public IEnumerable<Href> Add( Href href )
    {
        yield return href;
    }

    public IEnumerable<Href> AddRange( List<Href> hrefs )
    {
        foreach( Href href in hrefs )
        {
            yield return href;
        }
    }

    public IEnumerator<Href> GetEnumerator()
    {
        return hrefs.GetEnumerator();
    }

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

Я не совсем уверен, как связать возврат урожая с частным списком.

Спасибо за помощь!

8
задан abatishchev 21 May 2010 в 15:07
поделиться

2 ответа

Интерфейсы IEnumerable и IEnumerable используются для создания последовательности, доступной только для чтения, или для обеспечения просмотра элементов в коллекции только для чтения.

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

public class HrefCollection : IEnumerable<Href>
{
    private readonly List<Href> _hrefs = new List<Href>();

    public void Add(Href href)
    {
        _hrefs.Add(href);
    }

    public void AddRange(IEnumerable<Href> hrefs)
    {
        _hrefs.AddRange(hrefs);
    }

    public IEnumerator<Href> GetEnumerator()
    {
        return _hrefs.GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return ((IEnumerable)_hrefs).GetEnumerator();
    }
}
5
ответ дан 5 December 2019 в 22:16
поделиться
foreach( Href href in hrefs )
{
    yield return href;
}

должно быть

foreach( Href href in this.hrefs )
{
    yield return href;
}
foreach( Href href in hrefs )
{
    yield return href;
}
1
ответ дан 5 December 2019 в 22:16
поделиться
Другие вопросы по тегам:

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