Отсортировать список контактов по алфавиту

Есть коллекция 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"];
    }
}

Ответы (0 шт):