12

我有一个文档管理系统,其中文档可以有多个版本。每个版本都被保存,用户可以查看版本历史。

我想知道的是:我应该为版本号使用什么数据类型?十进制,浮点数还是双精度数?我正在使用 .NET 和 C#。

版本号从0.1开始,每个已发布的主要版本将四舍五入到下一个整数。即0.41.01.32.0等等。

当版本号达到0.9并添加了次要版本时,我希望该数字变为0.10而不是1.0,当我添加它时。这是最大的问题。

任何建议表示赞赏。

谢谢。

4

5 回答 5

20

System.Version

这已经存储了不同的部分,处理将其呈现为字符串(修订和构建组件仅在非零时用于显示,因此它们与您的案例无关)并且(最重要的是)已经其他 .NET 开发人员理解,并且不会导致混淆(如果我看到某些版本号的使用不是System.Version我会花一些时间尝试找出为什么Version对这项工作还不够好,以防万一这被证明很重要并隐藏了一个令人讨厌的惊喜。如果它足以胜任这项工作,我会对开发人员这样浪费我的时间感到恼火)。

您可以使用扩展方法处理您想要轻松递增的方法:

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);
}
于 2010-11-12T13:58:25.650 回答
5

两个整数怎么样?一个用于主要修订,一个用于次要修订?

于 2010-11-12T13:42:49.563 回答
2

为此创建自己的数据类型

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

您还可以添加一个比较器,这样您就可以检查两个版本号,例如查看哪个版本号是两个版本号中的最高版本。

编辑

添加了比较器逻辑也可以很好地衡量:)

于 2010-11-12T13:45:28.163 回答
1

我建议两个整数:一个主要的和一个次要的。您甚至可以将其存储为就major * 1000 + minor好像您想要一个变量一样。

于 2010-11-12T13:43:35.780 回答
1

十进制应该是上面给出的最好的,但正如其他人指出的那样,两个整数会更好。

双精度浮点数并不能准确存储所有十进制值,您不希望您的版本突然变为 1.219999999999999999

于 2010-11-12T13:43:36.453 回答