2010-11-12 15 views
9

Belgelerin birden çok sürümüne sahip olduğu bir belge yönetim sistemim var. Her sürüm kaydedilir ve kullanıcılar sürüm geçmişini görüntüleyebilir.Sürüm Numaraları yüzer, ondalık veya çift

Bilmek istediklerim: Sürüm numaraları için ne tür veri kullanmalıyım? Ondalık, Kayan veya Çift? .NET ve C# kullanıyorum.

Versiyon numaraları 0.1 başlar ve her büyük versiyonu sonraki tam sayıya yuvarlanır yayınladı. yani 0.4 vb 2.0

bir sürüm numaraları 0.9 ve ben 0.10 gitmek için numarayı istiyorum eklenen bir minör versiyonunu vurur için 1.0 ve 1.3 gider gider Eklediğimde,1.0. Bu en büyük sorun.

Herhangi bir öneri takdir edilir.

Teşekkürler.

cevap

17

System.Version

Bu zaten farklı bölümlerini saklayan bir dize (düzeltme olarak sunulması ile ilgilenir ve bileşenleridir inşa için de karşılaştırıcısı mantığı Sadece sıfır olmayanlarsa ekranda kullanılırlar, dolayısıyla da durumunuzla ilgisiz kalmazlar) ve (hepsinden önemlisi) diğer .NET geliştiricileri tarafından zaten anlaşılırlar ve karışıklığa yol açmazlar (eğer biraz kullanım görürsemolmayan bir sürüm numarasınınBiraz zaman harcadım o zaman neden önemli olduğunu kanıtladı ve kötü bir sürpriz sakındı, Version neden iş için yeterince iyi değildi, çalışmamaya çalışıyorum. Eğer iş için yeterince iyi olsaydı, geliştiriciye zamanımı harcıyor gibi tahriş olurdum).

Sen uzatma yöntemleri ile kolaylıkla artırma için istediğiniz araçlarla başa çıkabilirim: Elbette

public static Version IncrementMajor(this Version ver) 
{ 
    return new Version(ver.Major + 1, 0); 
} 
public static Version IncrementMinor(this Version ver) 
{ 
    return new Version(ver.Major, ver.Minor + 1); 
} 
+0

Çözümünüzün neden bu kadar düşük puan aldığından emin değilsiniz. Benim düşüncemde, mümkün olan her zaman mevcut uygulamaları kullanmalıyız. –

+1

Onun bir vesile olmasını çok isterdim, ama gün için kotanımı kullandım, bu yüzden geri gelip yarın bir yer ayırmak zorundayım. Açıkçası buradaki en iyi cevap. –

+0

En azından OP'nin cevabımdaki onay işaretini Jon Hanna'nın cevabına değiştirmesi en üstte gösterilir. –

5

İki tam sayı nasıl? Biri majör revizyon için mi?

+0

! Teşekkürler. – Jamie

1

İki tam sayı öneririm: büyük ve küçük. Bir değişken istiyorsanız, bunu major * 1000 + minor olarak saklayabilirsiniz.

1

Ondalık, yukarıda belirtilenlerin en iyisi olmalıdır, ancak diğer ikisi gibi, iki tane daha iyi olacaktır.

Çiftler ve yüzer doğru size sürümü aniden 1,219999999999999999

+5

Ve '0.1' için' 0.9' eklediğinizde, OP istediği gibi '0.10' almazsınız ... – Oded

2

olmak bu

public struct VersionNumber : IComparable<ReleaseNumber> 
{ 
    public int MajorVersion{get;set;} 
    public int MinorVersion{get;set;} 

    public VersionNumber(int major, int minor) 
    { 
    MajorVersion = major; 
    MinorVersion = minor; 
    } 

    public override string ToString(){ 
    return major + '.' + minor; 
    } 

    public int CompareTo(VersionNumber other) { 
    int result; 
    result = MajorVersion.CompareTo(other.MajorVersion); 
    if (result != 0) { return result; } 
    return MinorVersion.CompareTo(other.MinorVersion); 
    } 
    public static bool operator <(VersionNumber left, VersionNumber right) { 
    return left.CompareTo(right) < 0; 
    } 
    public static bool operator <=(VersionNumber left, VersionNumber right) { 
    return left.CompareTo(right) <= 0; 
    } 
    public static bool operator >(VersionNumber left, VersionNumber right) { 
    return left.CompareTo(right) > 0; 
    } 
    public static bool operator >=(VersionNumber left, VersionNumber right) { 
    return left.CompareTo(right) >= 0; 
    } 
} 

Ayrıca karşılaştırıcısı ekleyebilir için kendi veri türünü Make istemiyoruz, tüm ondalık değerleri saklamaz Örneğin, iki sürüm numarasının hangisi olduğunu görmek için iki sürüm numarasını kontrol edebilirsiniz.

DÜZENLEME

Eklendi iyi ölçmek :)

+0

Son olarak, bir struct kullanmak için bir nedenim var. Teşekkürler. – Jamie

+5

'System.Version' zaten bunu yapıyor. –

+0

Keşke Jon Hanna'nın cevabını tekrar yapabilseydim. Tekerleği yeniden icat etmeyin – Kell