using System.Collections.Generic;
using static System.Console;
public static void Main() {
var lista = new List<string> { "1.01", "1.A", "14.04", "14.11", "22.01", "3.04", "30.01", "4.01", "40.02" };
foreach (var item in lista.OrderBy(item => item, new MyStringComparer())) {
public class MyStringComparer : IComparer<string>
public int Compare(string x, string y){
string[] xs = x.Split('.'), ys = y.Split('.');
if(int.TryParse(xs[0], out x1) && int.TryParse(ys[0], out y1)){
return comp == 0 ? string.Compare(xs[1], ys[1]) : comp;
comp = string.Compare(xs[0], ys[0]);
return comp == 0 ? string.Compare(xs[1], ys[1]) : comp;