Compare los números de versión sin usar la función de división

¿Cómo comparo los números de versión?

Por ejemplo:

x = 1.23.56.1487.5

y = 1.24.55.487.2

¿Puedes usar la clase Versión?

http://msdn.microsoft.com/en-us/library/system.version.aspx

Tiene una interfaz IComparable. Tenga en cuenta que esto no funcionará con una cadena de versión de 5 partes como la que ha mostrado (¿esa es realmente la cadena de su versión?). Suponiendo que sus entradas son cadenas, aquí hay una muestra de trabajo con la cadena de versión de .NET de 4 partes normal:

 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; } } 

Si puede vivir con el esquema major.minor.build.revision, puede usar la clase .Net Version . De lo contrario, tendría que implementar algún tipo de análisis de izquierda a derecha y continuar hasta que tenga una diferencia o devolver que dos versiones son iguales.

 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) 

Además de la respuesta de @JohnD, puede ser necesario comparar solo los números de versión parcial sin usar Split (‘.’) U otra cadena < -> int conversion bloat. Acabo de escribir un método de extensión CompareTo con 1 argumento adicional: número de partes significativas del número de versión para comparar (entre 1 y 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; } }