うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【C#】バージョンを比較する

バージョンの比較には 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
}