3

2 つのバージョン番号に対して CompareTo を実行し、バージョンが >= versionA の場合に X を発生させるために、Version オブジェクトを使用しています。

私の問題は、以下のコードで、CompareTo が VersionB が VersionA より大きいことを宣言していることです。

Version versionA = new Version("2.12");
Version versionB = new Version("2.121");

switch (versionB.CompareTo(versionA))
                {
                    case 0: // Equal To
                        _doThis = true;
                        break;
                    case 1: // Greater Than
                        _doThat = true;
                        break;
                    case 2: // Less Than
                        _doNothing = true;
                        break;
                }

この比較はケース 2 に当てはまります。ここに示すように、メソッドに渡されるファームウェア バージョンを一致させるために正規表現を使用しています。

^\S+\s(?(\d+.*)+)\s*.*$

「Version 2.12」の行に沿って何かを受け入れます。この正規表現は「2.12」だけを残し、Version オブジェクトに初期化されます。

バージョン 2.12 が 2.121 よりも新しいバージョンであると .NET が私に言っている理由について、誰か考えがありますか?


編集:

コードを次のように変更しました。

Version versionA = new Version("2.12");
Version versionB = new Version("2.121");

if (versionB.CompareTo(versionA) >= 0)
{
     _doThis = true;
}

そして、それは正しく動作します。ただし、「2.11」と「2.121」を比較すると、1 も返されます。この比較は -1 を返すべきではありませんか?

4

2 に答える 2

5

Versionクラスは、比較演算子に演算子のオーバーロードを提供します。それらを使用してみませんか?それは本当にコードの意図をより明確にします。

簡単に書くことができるという意味:

if(versionB >= versionA) {
  _doThis = true;
}

私にとって、これはCompareToを呼び出して戻り値の符号を調べるよりもはるかに明確です。

于 2012-12-14T17:28:12.723 に答える
3

Version.CompareTo(Version) は符号付き整数を返します

negative means it's before
zero the same
positive after.

結果の規模が大きくなるほど、バージョンが離れます。

スイッチを取り除くか、compareto の戻りを最初に調整します。

于 2012-12-14T17:26:23.040 に答える