バージョンの比較には System.Version.CompareTo を利用する
このメソッドの戻り値は以下のようになっている
戻り値 | 説明 |
---|---|
-1 | 前のバージョン |
0 | 同じバージョン |
1 | 後のバージョン |
ラップクラス
上記戻り値の判定を利用した、便利クラス
public static class VersionUtility { /// <summary> /// Target が新しいかどうか /// </summary> public static bool IsLatest(string current, string target) { return Compare(current, target) <= -1; } /// <summary> /// 同じかどうか /// </summary> public static bool IsSame(string current, string target) { return Compare(current, target) == 0; } /// <summary> /// Target が古いかどうか /// </summary> public static bool IsOld(string current, string target) { return Compare(current, target) >= 1; } private static int Compare(string current, string target) { if (string.IsNullOrEmpty(current) || string.IsNullOrEmpty(target)) { return 0; } try { var currentVersion = new System.Version(current); var targetVersion = new System.Version(target); return currentVersion.CompareTo(targetVersion); } catch (Exception e) { Debug.LogError(e.Message); return 0; } } }
サンプル
public static void Main() { var current = "1.3.4"; var old = "1.3.0"; var latest = "1.4.2"; Console.WriteLine(VersionUtility.IsLatest(current, old)); // false Console.WriteLine(VersionUtility.IsLatest(current, current)); // false Console.WriteLine(VersionUtility.IsLatest(current, latest)); // true Console.WriteLine(VersionUtility.IsOld(current, old)); // true Console.WriteLine(VersionUtility.IsOld(current, current)); // false Console.WriteLine(VersionUtility.IsOld(current, latest)); // false Console.WriteLine(VersionUtility.IsSame(current, old)); // false Console.WriteLine(VersionUtility.IsSame(current, current)); // true Console.WriteLine(VersionUtility.IsSame(current, latest)); // false }