2013-03-03 4 views
0

У меня есть класс под названием «Существо», который находится на одном из нескольких этапов. Есть только семь этапов, но каждый этап имеет разное время, которое будет использоваться во всем приложении. Я хотел бы сделать что-то вроде следующего:Как смоделировать «этап» с Int и Timespan - пользовательский enum?

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

Но тоже как-то прикрепить TimeSpan к каждому из них, так что

Stage.One.Time 

возвращает что-то вроде «один час». Как это можно достичь?

ответ

1

К сожалению, перечисления на C# довольно ограничены. У вас есть несколько вариантов:

  • Создайте методы расширения, которые могут добавить любую логику, которую вы хотите. Вы могли бы написать:

    Stage.One.ToTimeSpan() 
    

    (где ToTimeSpan является метод расширения, который, вероятно, либо использовать Dictionary<Stage, TimeSpan> или переключатель заявление)

  • Написать «умный» перечисление, которое на самом деле просто тип с ограниченный набор значений:

    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; 
        } 
    } 
    

    недостатком этого является то, что теперь вы не можете переключиться на стадии :(

+0

Но класс 'Stage' мог иметь член перечисления, который вы могли бы включить ... – Mark

+0

@Mark: Да, это возможно - но это заканчивается тем, что оно беспорядочно. –

Смежные вопросы