Sortieren von gemischten Zahlen und Zeichenfolgen

Ich habe eine Liste von Zeichenfolgen, die einen Buchstaben oder eine Zeichenfolgendarstellung eines Int (maximal 2 Ziffern) enthalten können. Sie müssen entweder alphabetisch oder (wenn es sich tatsächlich um ein int handelt) nach dem numerischen Wert sortiert werden, den sie darstellen.

Beispiel:

<code>IList<string> input = new List<string>()
    {"a", 1.ToString(), 2.ToString(), "b", 10.ToString()};

input.OrderBy(s=>s)
  // 1
  // 10
  // 2
  // a
  // b
</code>

Was ich möchte, ist

<code>  // 1
  // 2
  // 10
  // a
  // b
</code>

Ich habe eine Idee, wie ich es formatieren soll, indem ich versuche, es zu analysieren. Wenn es dann ein erfolgreicher Tryparse ist, formatiere ich es mit meinem eigenen benutzerdefinierten String-Formatierer, damit es vorangestellte Nullen hat. Ich hoffe auf etwas Einfacheres und Performanteres.

Bearbeiten
Am Ende habe ich einen IComparer erstellt, den ich zur späteren Verwendung in meiner Utils-Bibliothek abgelegt habe.
Während ich dabei war, warf ich auch Doppel in die Mischung.

<code>public class MixedNumbersAndStringsComparer : IComparer<string> {
    public int Compare(string x, string y) {
        double xVal, yVal;

        if(double.TryParse(x, out xVal) && double.TryParse(y, out yVal))
            return xVal.CompareTo(yVal);
        else 
            return string.Compare(x, y);
    }
}

//Tested on int vs int, double vs double, int vs double, string vs int, string vs doubl, string vs string.
//Not gonna put those here
[TestMethod]
public void RealWorldTest()
{
    List<string> input = new List<string>() { "a", "1", "2,0", "b", "10" };
    List<string> expected = new List<string>() { "1", "2,0", "10", "a", "b" };
    input.Sort(new MixedNumbersAndStringsComparer());
    CollectionAssert.AreEquivalent(expected, input);
}
</code>

Antworten auf die Frage(10)

Ihre Antwort auf die Frage