Если вам не нужно сортировать «на месте», вы можете использовать LINQ, чтобы дать вам новый отсортированный список.
var sorted = oldList.OrderBy( l => l.Count );
В противном случае вам нужно написать свой собственный Comparer, который берет два списка и возвращает порядок их размера.
public class CountComparer : IComparer<List<string>>
{
#region IComparer<List<string>> Members
public int Compare( List<string> x, List<string> y )
{
return x.Count.CompareTo( y.Count );
}
#endregion
}
oldList.Sort( new CountComparer() );
Или, как указывает @Josh, вы можете сделать это с помощью лямбда-выражения.
oldList.Sort( (a,b) => a.Count.CompareTo( b.Count ) )
IMO, этот последний работает хорошо, если сравнение относительно простое или используется один раз, но реальный класс может быть предпочтительнее, так как сравнение становится более сложным или если вам нужно повторить его в нескольких местах.