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