Sort versions C# with Example



Sort versions C# with Example

Class: 
public class Version : IComparable 
{ 
public int[] Parts { get; } 
public Version(string value) 
{ 
if (value == null) 
throw new ArgumentNullException(); 
if (!Regex.IsMatch(value, @"^[0-9]+(\.[0-9]+)*$")) 
throw new ArgumentException("Invalid format"); 
var parts = value.Split('.'); 
Parts = new int[parts.Length]; 
for (var i = 0; i < parts.Length; i++) 
Parts[i] = int.Parse(parts[i]); 
} 
public override string ToString() 
{ 
return string.Join(".", Parts); 
} 
public int CompareTo(Version that) 
{ 
if (that == null) return 1; 
var thisLength = this.Parts.Length; 
var thatLength = that.Parts.Length; 
var maxLength = Math.Max(thisLength, thatLength); 
for (var i = 0; i < maxLength; i++) 
{ 
var thisPart = i < thisLength ? this.Parts[i] : 0; 
var thatPart = i < thatLength ? that.Parts[i] : 0; 
if (thisPart < thatPart) return -1; 
if (thisPart > thatPart) return 1; 
} 
return 0; 
} 
} 
Test: 
Version a, b; 
a = new Version("4.2.1"); 
b = new Version("4.2.6"); 
a.CompareTo(b); // a < b : -1 
a = new Version("2.8.4"); 
b = new Version("2.8.0"); 
a.CompareTo(b); // a > b : 1 
a = new Version("5.2"); 
b = null; 
a.CompareTo(b); // a > b : 1 
 

a = new Version("3"); 
b = new Version("3.6"); 
a.CompareTo(b); // a < b : -1 
var versions = new List 
{ 
new Version("2.0"), 
new Version("1.1.5"), 
new Version("3.0.10"), 
new Version("1"), 
null, 
new Version("1.0.1") 
}; 
versions.Sort(); 
foreach (var version in versions) 
Console.WriteLine(version?.ToString() ?? "NULL"); 
Output: 
NULL 
1 
1.0.1 
1.1.5 
2.0 
3.0.10 
Demo: 
Live demo on Ideone 
 

0 Comment's

Comment Form