我有一个文档管理系统,其中文档可以有多个版本。每个版本都会保存,用户可以查看版本历史记录。
我想知道的是:我应该为版本号使用什么数据类型?十进制,浮点数或双精度?我正在使用.NET和C#。
版本号从 0.1 开始,每个已发布的主要版本将四舍五入为下一个整数。即 0.4 进入 1.0 , 1.3 进入 2.0 等。
如果版本号达到 0.9 且添加了次要版本,我希望该号码转到 0.10 而不是 1.0 ,当我添加它。这是最大的问题。
任何建议都表示赞赏。
感谢。
答案 0 :(得分:17)
System.Version
这已经存储了不同的部分,处理它作为字符串呈现(修订和构建组件仅用于显示,如果它们非零,所以它们与你的情况无关)和(最重要的是)其他.NET开发人员已经理解了这一点,并且不会引起混淆(如果我看到某些版本号不是System.Version
的话,我会花一些时间然后试图找出原因{ {1}}对于这项工作来说还不够好,如果事情证明是重要的并且隐藏了一个令人讨厌的惊喜。如果它对于这份工作来说已经足够好了,我会对开发人员浪费我的时间感到恼火。)
您可以使用扩展方法轻松处理所需的扩展方式:
Version
答案 1 :(得分:5)
两个整数怎么样?一个用于专业修改,一个用于次要修订?
答案 2 :(得分: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;
}
}
您还可以添加比较器,以便检查两个版本号,以查看哪个版本号是两个版本号的最高版本。
修改强>
为了更好的衡量标准,还添加了比较器逻辑:)
答案 3 :(得分:1)
我建议两个整数:一个主要和一个小调。如果您想要一个变量,甚至可以将其存储为major * 1000 + minor
。
答案 4 :(得分:1)
十进制应该是上面给出的最好的,但正如其他人所说的那样,两个整数会更好。
双打和浮点数不能准确存储所有小数值,你不希望你的版本突然变成1.219999999999999999