0

いくつかの段階の1つにある「Creature」という名前のクラスがあります。ステージは7つしかありませんが、各ステージには、アプリケーション全体で使用される異なる期間があります。次のようなことをしたいのですが。

enum Stage
    {
    One,
    Two,
    Three,
    Four,
    Five
    };

しかし、それからどういうわけかそれらのそれぞれにタイムスパンを添付して、

Stage.One.Time 

「1時間」のようなものを返します。これはどのように達成できますか?

4

1 に答える 1

1

残念ながら、C#の列挙型はかなり制限されています。ただし、いくつかのオプションがあります。

  • 必要なロジックを追加できる拡張メソッドを作成します。次に、次のように書くことができます。

    Stage.One.ToTimeSpan()
    

    (ここToTimeSpanで、拡張メソッドは、おそらくaDictionary<Stage, TimeSpan>またはswitchステートメントを使用します)

  • 「スマート」列挙型を記述します。これは、実際には、値のセットが制限された単なる型です。

    public sealed class Stage
    {
        public static readonly Stage One = new Stage(TimeSpan.FromHours(1));
        public static readonly Stage Two = new Stage(TimeSpan.FromHours(5));
        // ...
    
        private readonly TimeSpan time;
        public TimeSpan Time { get { return time; } }
    
        private Stage(TimeSpan time)
        {
            this.time = time;
        }
    }
    

    これの欠点は、ステージをオンにできないことです:(

于 2013-03-03T17:55:26.137 に答える