Отсортировать список контактов по алфавиту
Есть коллекция PhoneBook, в ней метод Add. Помогите пожалуйста сделать сортировку контактов по алфавиту не на выдаче, а на добавлении.
public class PhoneBook<T> : IPhoneBook<T> where T : IContact
{
private IDictionary<CultureInfo, ICollection<T>> _culturedCollections;
private IDictionary<CharType, ICollection<T>> _specialCollections;
private ICultureResolver _cultureResolver;
public PhoneBook()
{
_cultureResolver = new CultureResolver();
_culturedCollections = new Dictionary<CultureInfo, ICollection<T>>();
_culturedCollections.Add(CultureInfo.GetCultureInfo("ru-Ru"), new List<T>());
_culturedCollections.Add(CultureInfo.GetCultureInfo("en-Gb"), new List<T>());
_specialCollections = new Dictionary<CharType, ICollection<T>>();
_specialCollections.Add(CharType.Number, new List<T>());
_specialCollections.Add(CharType.Special, new List<T>());
}
public void Add(T contact)
{
if (String.IsNullOrEmpty(contact.Name))
{
throw new ArgumentException("Name is null or empty");
}
var collection = DetermineCollection(contact.Name);
collection.Add(contact);
}
public ICollection<T> DetermineCollection(string name)
{
var cultureInfo = _cultureResolver.GetCultureInfo(name);
if (cultureInfo == null)
{
if (Regex.IsMatch(name[0].ToString(), "[0-9]"))
{
return _specialCollections[CharType.Number];
}
else
{
return _specialCollections[CharType.Special];
}
}
return _culturedCollections[cultureInfo];
}
public IReadOnlyCollection<T> this[string key]
{
get
{
var collection = DetermineCollection(key);
var result = new List<T>();
foreach (var contact in collection)
{
if (contact.Name.StartsWith(key, StringComparison.InvariantCultureIgnoreCase))
{
result.Add(contact);
}
}
return result;
}
}
}
Класс Program
class Program
{
static void Main(string[] args)
{
PhoneBook<Contact> phoneBook = new PhoneBook<Contact>();
phoneBook.Add(new Contact() { Name = "Ivan", LastName = "Petrov" });
phoneBook.Add(new Contact() { Name = "Ivan", LastName = "Novikov" });
phoneBook.Add(new Contact() { Name = "Денис", LastName = "Леонов" });
var x = phoneBook["Iv"];
}
}