2.5.10

2.5.10 #

解答 #

用一个 int 数组来保存版本号,按顺序进行比较。

如果两个版本号不等长且前缀相同,那么较长的版本号比较高,例如:1.2.1 和 1.2。

internal class Version : IComparable<Version>
{
    private readonly int[] _versionNumber;

    public Version(string version)
    {
        var versions = version.Split('.');
        _versionNumber = new int[versions.Length];
        for (var i = 0; i < versions.Length; i++)
        {
            _versionNumber[i] = int.Parse(versions[i]);
        }
    }

    public int CompareTo(Version other)
    {
        for (var i = 0; i < _versionNumber.Length && i < other._versionNumber.Length; i++)
        {
            if (_versionNumber[i].CompareTo(other._versionNumber[i]) != 0)
                return _versionNumber[i].CompareTo(other._versionNumber[i]);
        }
        return _versionNumber.Length.CompareTo(other._versionNumber.Length);
    }

    public override string ToString()
    {
        var result = "";
        for (var i = 0; i < _versionNumber.Length - 1; i++)
        {
            result += _versionNumber[i] + ".";
        }
        result += _versionNumber[_versionNumber.Length - 1].ToString();
        return result;
    }
}