Sürüm numaralarını nasıl karşılaştırabilirim? ÖrneğinAyraç işlevini kullanmadan sürüm numaralarını karşılaştırın
:
x = 1.23.56.1487.5
1.24.55.487.2
Sürüm numaralarını nasıl karşılaştırabilirim? ÖrneğinAyraç işlevini kullanmadan sürüm numaralarını karşılaştırın
:
x = 1.23.56.1487.5
1.24.55.487.2
Version sınıfını kullanabilir miyim = y?
http://msdn.microsoft.com/en-us/library/system.version.aspx
Bir ıcomparable arayüze sahiptir. Bunun, göstermiş olduğunuz 5 parçalı bir sürüm dizesiyle çalışmayacağını unutmayın (bu gerçekten sürüm dizginiz mi?). Varsayarsak senin girişler burada normal bir .NET 4 bölümlük sürüm dizesiyle bir çalışma örneği var, görürsün:
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;
}
}
Sadece sürüm 2-4 parçadan oluşursa – username
@dev_Boston sadece bir istisnadır ... sadece bu değerler ile yapın v1 = 1.0001 ve v2 = 1.1 .it bana eşit verir. –
Evet, sürüm dizeleri ondalık olmayan dizeler değil ve sıfırların sürüm numarasının bir bölümüne eklenmesi alakasız. Diğer bir deyişle, "00001", sürüm dizesinin 2. bölümünde "1" e eşittir. – JohnD
Eğer Ana.Alt.Yapı.Düzeltme düzeni ile yaşayabilir Eğer .Net Version sınıfını kullanabilirsiniz . Aksi takdirde, soldan sağa doğru bir şekilde ayrıştırma gerçekleştirmeniz ve iki versiyonun eşit olduğu bir fark veya geri dönüşe kadar devam etmeniz gerekir. > Int dönüşüm kabartmak -
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; i<min;i++)
{
if(Convert.ToInt32(m1[i].Value)>Convert.ToInt32(m2[i].Value))
{
return 1;
}
if(Convert.ToInt32(m1[i].Value)<Convert.ToInt32(m2[i].Value))
{
return -1;
}
}
return 0;
}
Bunun 'compareVersion ("1.3", "1.3.1") için eşitlik getirdiğini unutmayın –
@JohnD ek olarak '(.') Ya da diğer dize < s cevabı bir Böl kullanmadan sadece kısmi sürüm numaraları karşılaştırmak gereğini olabilir'. Ben sadece 1 ek argüman ile CompareTo bir uzantısı yöntemi yazdım - karşılaştırmak için sürüm numarası önemli parçaların sayısı (1 ve 4 arasında).
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;
}
}
Sonucun ne olmasını istersiniz? – BoltClock
5 parçalı bir versiyon? Tipik 4 bölüm sürümünü kullanıyorsanız, sürümleri karşılaştırmak ve – psousa
sürüm dizesini ayrıştırmak için yöntemler içeren System.Version sınıfını kullanabilirsiniz. X ve y türleri nelerdir? – Gleno