Compare os números de versão sem usar a function split

Como faço para comparar números de versão?

Por exemplo:

x = 1.23.56.1487.5

y = 1.24.55.487.2

Você pode usar a class Version?

http://msdn.microsoft.com/pt-br/library/system.version.aspx

Tem uma interface IComparable. Esteja ciente de que isso não funcionará com uma string de versão de 5 partes como você mostrou (essa é realmente a sua string de versão?). Supondo que suas inputs sejam strings, aqui está um exemplo de trabalho com a string de versão normal de 4 partes do .NET:

 static class Program { static void Main() { string v1 = "1.23.56.1487"; string v2 = "1.24.55.487"; var version1 = new Version(v1); var version2 = new Version(v2); var result = version1.CompareTo(version2); if (result > 0) Console.WriteLine("version1 is greater"); else if (result < 0) Console.WriteLine("version2 is greater"); else Console.WriteLine("versions are equal"); return; } } 

Se você pode viver com o esquema major.minor.build.revision, você pode usar a class .Net Version . Caso contrário, você teria que implementar algum tipo de análise da esquerda para a direita e continuar até que você tenha uma diferença ou retorne que as duas versões são iguais.

 public int compareVersion(string Version1,string Version2) { System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"([\d]+)"); System.Text.RegularExpressions.MatchCollection m1 = regex.Matches(Version1); System.Text.RegularExpressions.MatchCollection m2 = regex.Matches(Version2); int min = Math.Min(m1.Count,m2.Count); for(int i=0; iConvert.ToInt32(m2[i].Value)) { return 1; } if(Convert.ToInt32(m1[i].Value) 

Além da resposta de @JohnD, pode ser necessário comparar apenas números parciais de versão sem usar a divisão (‘.’) Ou outro string <-> int. Acabei de escrever um método de extensão CompareTo com 1 argumento adicional – número de partes significativas do número da versão para comparar (entre 1 e 4).

 public static class VersionExtensions { public static int CompareTo(this Version version, Version otherVersion, int significantParts) { if(version == null) { throw new ArgumentNullException("version"); } if(otherVersion == null) { return 1; } if(version.Major != otherVersion.Major && significantParts >= 1) if(version.Major > otherVersion.Major) return 1; else return -1; if(version.Minor != otherVersion.Minor && significantParts >= 2) if(version.Minor > otherVersion.Minor) return 1; else return -1; if(version.Build != otherVersion.Build && significantParts >= 3) if(version.Build > otherVersion.Build) return 1; else return -1; if(version.Revision != otherVersion.Revision && significantParts >= 4) if(version.Revision > otherVersion.Revision) return 1; else return -1; return 0; } }