コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】バージョン番号を管理する構造体の例

ソースコード

using System.Linq;

internal readonly struct VersionNumber
{
    private readonly string m_version;

    public int Major { get; }
    public int Minor { get; }
    public int Patch { get; }

    public VersionNumber( string version )
    {
        var array = version
                .Split( "." )
                .Select( x => int.TryParse( x, out var result ) ? result : default )
                .ToArray()
            ;

        Major     = array.ElementAtOrDefault( 0 );
        Minor     = array.ElementAtOrDefault( 1 );
        Patch     = array.ElementAtOrDefault( 2 );
        m_version = $"{Major}.{Minor}.{Patch}";
    }

    public VersionNumber
    (
        int major,
        int minor,
        int patch
    )
    {
        Major     = major;
        Minor     = minor;
        Patch     = patch;
        m_version = $"{Major}.{Minor}.{Patch}";
    }

    public static implicit operator string( in VersionNumber versionNumber )
    {
        return versionNumber.m_version;
    }

    public override string ToString()
    {
        return m_version;
    }
}