views:

909

answers:

3

My Code looks like this :

Collection<NameValueCollection> optionInfoCollection = ....
List<NameValueCollection> optionInfoList = new List<NameValueCollection>();
optionInfoList = optionInfoCollection.ToList();

if(_isAlphabeticalSoting)
   Sort optionInfoList

I tried optionInfoList.Sort() but it is not working.

+1  A: 

You need to set up a comparer that tells Sort() how to arrange the items.

Check out List.Sort Method (IComparer) for an example of how to do this...

mezoid
+10  A: 

Using the sort method and lambda expressions, it is really easy.

myList.Sort((a, b) => String.Compare(a.Name, b.Name))

The above example shows how to sort by the Name property of your object type, assuming Name is of type string.

m-sharp
Which will blow up if a.Name is null...
Marc Gravell
You could just use string.Compare(a.Name, b.Name), which would be safe?
Marc Gravell
Thanks! Learn something new everyday... I'll edit the answer.
m-sharp
+3  A: 

If you just want Sort() to work, then you'll need to implement IComparable or IComparable<T> in the class.

If you don't mind creating a new list, you can use the OrderBy/ToList LINQ extension methods. If you want to sort the existing list with simpler syntax, you can add a few extension methods, enabling:

list.Sort(item => item.Name);

For example:

public static void Sort<TSource, TValue>(
    this List<TSource> source,
    Func<TSource, TValue> selector)
{
    var comparer = Comparer<TValue>.Default;
    source.Sort((x, y) => comparer.Compare(selector(x), selector(y)));
}
public  static void SortDescending<TSource, TValue>(
    this List<TSource> source,
    Func<TSource, TValue> selector)
{
    var comparer = Comparer<TValue>.Default;
    source.Sort((x, y) => comparer.Compare(selector(y), selector(x)));
}
Marc Gravell