12

ドキュメントに複数のバージョンを含めることができるドキュメント管理システムがあります。各バージョンが保存され、ユーザーはバージョン履歴を表示できます。

私が知りたいのは、バージョン番号にどのデータ型を使用する必要があるかということです。10進数、フロート、またはダブル?.NETとC#を使用しています。

バージョン番号は0.1から始まり、公開された各メジャーバージョンは次の整数に丸められます。つまり、 0.41.0になり、1.32.0になります。

バージョン番号が0.9に達し、マイナーバージョンが追加された場合、追加するときに、番号を1.0ではなく0.10に変更したいと思います。これが最大の問題です。

任意の提案をいただければ幸いです。

ありがとう。

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

2つの整数はどうですか?1つはメジャーリビジョン用、もう1つはマイナーリビジョン用ですか?

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

比較機能を追加して、2つのバージョン番号をチェックし、たとえば、どちらが2つのバージョン番号の最高バージョンであるかを確認することもできます。

編集

良い測定のためにも比較ロジックを追加しました:)

于 2010-11-12T13:45:28.163 に答える
1

メジャーとマイナーの2つの整数をお勧めします。1つの変数が必要であるかのようにこれを格納することもできmajor * 1000 + minorます。

于 2010-11-12T13:43:35.780 に答える
1

10進数は上記の中で最も優れているはずですが、他の人が指摘しているように、2つのintの方が優れています。

Doublesとfloatは、すべての10進値を正確に格納するわけではありません。バージョンが突然1.219999999999999999になることは望ましくありません。

于 2010-11-12T13:43:36.453 に答える