Ошибка при создании перечисления в C # - «ожидаемый идентификатор» - PullRequest
3 голосов
/ 30 января 2012

Я никогда не использовал перечисления до того, как у меня возникли проблемы при создании перечислений

я хочу создать перечисление в C #, что-то вроде

enum e{10:30 a.m.,10:31 a.m.,10:32 a.m.}

но там указан ожидаемый идентификатор. Можете ли вы помочь мне создать его?

Ответы [ 5 ]

6 голосов
/ 30 января 2012

Конечно, можно добавить атрибуты:

enum e
{
    [Description("10:30 a.m.")]
    AM1030,    

    [Description("10:31 a.m.")]
    AM1031,

    [Description("10:32 a.m.")]
    AM1032,
}


    var type = e.GetType();
    var memInfo = type.GetMember(e.AM1030.ToString());
    var attributes = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
    var description = ((DescriptionAttribute)attributes[0]).Description;
3 голосов
/ 30 января 2012

Я бы посоветовал посмотреть на DateTime: http://msdn.microsoft.com/en-us/library/system.datetime.aspx

Создание перечисления для возможных периодов дня будет склонно к гниению кода, так как вам придется менять это перечисление каждый раз, когда вы хотите поддержать другую минуту дня.

Но, если ваша бизнес-логика действительно специфична для этих трех минут, вам нужно что-то вроде:

    enum Minute
    {
        TenThirty,
        TenThirtyOne,
        TenThirtyTwo
    }

Перечисление просто берет идентификаторы, и они должны быть одним словом без пробелов.

3 голосов
/ 30 января 2012

Вы можете сделать

    enum e
    {
       time1,
       time2,
       time3, 
    } 

Вы не можете иметь значения, такие как 10:30, как типы перечисления.

2 голосов
/ 30 января 2012

Одним из вариантов будет не использование перечислений в вашем случае, а что-то вроде этого:

public static class Times {
    public static DateTime AM1030 = new DateTime(1,1,0,10,30);
    public static DateTime AM1031 = new DateTime(1,1,0,10,31);
    public static DateTime AM1032 = new DateTime(1,1,0,10,32);
}

var time = Times.AM1030;

Правда в том, что это не дает вам никакого значения, потому что вы все равно жестко кодируете значения.Лучше всего придать ему бизнес-концепцию, назвав эти даты как-то (я имею в виду, словом).

0 голосов
/ 30 января 2012

Прежде всего, перечисления должны быть объявлены на уровне класса.Это означает, что они не могут быть в скобках, которые охватывают ваш класс.

Неправильно:

public class {
    enum myEnum {...}
}

Правильно:

enum myEnum {...}

public class {
    ...
}

Второе: вы не можете просто написатьи ожидайте, что это сработает.Похоже, вы пытаетесь добавить время.Вы должны будете использовать объект datetime для этого.Или строка, если вы планируете анализировать ее каждый раз, когда читаете.

Вот пример перечисления, связывающего имена животных с числами:

public enum Pets { None=0, Dog=1, Cat=2, Bird=4, Rodent=8, Reptile=16, Other=32 };

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...