class NumericallySortableStringList : List { /// /// Helper class for sorting the strings ordinally /// private class NumericalStringComparer : IComparer { private Regex _numberRegEx = new Regex(@"([a-zA-Z])(\d+)_(\d+)", RegexOptions.Compiled); #region IComparer Members int IComparer.Compare(string x, string y) { Match xFileName = _numberRegEx.Match(x); Match yFileName = _numberRegEx.Match(y); int result = String.Compare(xFileName.Groups[1].Value, yFileName.Groups[1].Value); if (result != 0) return result; else return (int.Parse(xFileName.Groups[2].Value + xFileName.Groups[3].Value) - int.Parse(yFileName.Groups[2].Value + yFileName.Groups[3].Value)); } #endregion } public void SortOrdinal() { base.Sort(new OrdinalComparer()); } }