Оказывается, что существует что-то вроде спецификации для этого, по крайней мере, для Северной Америки, названной 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+))?$
Если у вас нет веских причин для этого, лучше всего унаследовать от System.Collections .ObjectModel.Collection
, поскольку в нем есть все, что вам нужно.
Обратите внимание, что, хотя от разработчиков IList
не требуется реализовывать this [int]
] (индексатор) должен быть O (1) (в основном, доступ в постоянное время), настоятельно рекомендуется сделать это.
В дополнение к получению из 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
}
В большинстве случаев вы можете просто использовать List
или наследовать от List
. Если вы производите от List
, вы автоматически получите реализацию для добавления и удаления.
Вы можете посмотреть Монопроект . Доступны полные исходные коды, поэтому вы можете посмотреть, как реализованы некоторые классы. Например, "System.Collections.Generics.List