Интерфейс Implementing IList

Оказывается, что существует что-то вроде спецификации для этого, по крайней мере, для Северной Америки, названной NANP.

необходимо определить точно, что Вы хотите. Что такое легальные разделители? Пробелы, тире, и периоды? Никакой разделитель не позволяется? Можно смешать разделители (например, +0.111-222.3333)? Как расширения (например, 111-222-3333 x 44444) собирающийся обрабатываться? Что относительно специальных чисел, как 911? Код зоны собирается быть дополнительным или необходимым?

Вот regex для 7 или 10 чисел цифры с позволенными расширениями, разделители являются пробелами, тире, или периоды:

^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$

12
задан Mehrdad Afshari 24 July 2009 в 08:36
поделиться

4 ответа

Если у вас нет веских причин для этого, лучше всего унаследовать от System.Collections .ObjectModel.Collection , поскольку в нем есть все, что вам нужно.

Обратите внимание, что, хотя от разработчиков IList не требуется реализовывать this [int] ] (индексатор) должен быть O (1) (в основном, доступ в постоянное время), настоятельно рекомендуется сделать это.

14
ответ дан 2 December 2019 в 03:14
поделиться

В дополнение к получению из List , вы можете вывести List и добавьте больше функций в свой класс фасада.

class MyCollection<T> : IList<T>
{
    private readonly IList<T> _list = new List<T>();

    #region Implementation of IEnumerable

    public IEnumerator<T> GetEnumerator()
    {
        return _list.GetEnumerator();
    }

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

    #endregion

    #region Implementation of ICollection<T>

    public void Add(T item)
    {
        _list.Add(item);
    }

    public void Clear()
    {
        _list.Clear();
    }

    public bool Contains(T item)
    {
        return _list.Contains(item);
    }

    public void CopyTo(T[] array, int arrayIndex)
    {
        _list.CopyTo(array, arrayIndex);
    }

    public bool Remove(T item)
    {
        return _list.Remove(item);
    }

    public int Count
    {
        get { return _list.Count; }
    }

    public bool IsReadOnly
    {
        get { return _list.IsReadOnly; }
    }

    #endregion

    #region Implementation of IList<T>

    public int IndexOf(T item)
    {
        return _list.IndexOf(item);
    }

    public void Insert(int index, T item)
    {
        _list.Insert(index, item);
    }

    public void RemoveAt(int index)
    {
        _list.RemoveAt(index);
    }

    public T this[int index]
    {
        get { return _list[index]; }
        set { _list[index] = value; }
    }

    #endregion

    #region Your Added Stuff

    // Add new features to your collection.

    #endregion
}
30
ответ дан 2 December 2019 в 03:14
поделиться

В большинстве случаев вы можете просто использовать List или наследовать от List . Если вы производите от List , вы автоматически получите реализацию для добавления и удаления.

1
ответ дан 2 December 2019 в 03:14
поделиться

Вы можете посмотреть Монопроект . Доступны полные исходные коды, поэтому вы можете посмотреть, как реализованы некоторые классы. Например, "System.Collections.Generics.List ".

1
ответ дан 2 December 2019 в 03:14
поделиться
Другие вопросы по тегам:

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