//Sorting List<> case Item is ListItem
//==============================================
List<ListItem> tempList = new List<ListItem>();

tempList.Insert(0, new ListItem("------------- Vehicle Reports 8"));
tempList.Insert(0, new ListItem("------------- Vehicle Reports 2"));
tempList.Insert(0, new ListItem("------------- Vehicle Reports 4"));

// sort asc
tempList.Sort(delegate(ListItem p1, ListItem p2) {
return p1.Text.CompareTo(p2.Text);
});
// sort desc
tempList.Sort(delegate(ListItem p1, ListItem p2) {
return p2.Text.CompareTo(p1.Text);
});

//Sorting List<> case Item is Object Class
//===============================================
//Apply to sorting in GridView
//===============================================
SortData(e.SortExpression, NewSortDirection, ref listMsgTicker);
//===============================================

#region method for sorting

private void SortData(string _expression, SortDirection _direction,
ref List<MsgTicker> data)
{
//sort asc ==
if (_direction == SortDirection.Ascending)
data.Sort(delegate(MsgTicker a, MsgTicker b)
{
switch (_expression)
{
case "MsgHeader": return a.MsgHeader.CompareTo(b.MsgHeader);
case "CreatedDate": return a.CreatedDate.CompareTo(b.CreatedDate);
case "ModifiedDate": return a.ModifiedDate.CompareTo(b.ModifiedDate);
default:
throw new NotImplementedException("Type of property not implemented yet");
}
});

//sort desc ==
if (_direction == SortDirection.Descending)
data.Sort(delegate(MsgTicker a, MsgTicker b)
{
switch (_expression)
{
case "MsgHeader": return b.MsgHeader.CompareTo(a.MsgHeader);
case "CreatedDate": return b.CreatedDate.CompareTo(a.CreatedDate);
case "ModifiedDate": return b.ModifiedDate.CompareTo(a.ModifiedDate);
default:
throw new NotImplementedException("Type of property not implemented yet");
}
});

//return data;
}

#endregion

ref: http://dotnetslackers.com/Community/blogs/simoneb/archive/2007/06/20/How-to-sort-a-generic-List_3C00_T_3E00_.aspx