Перечисления в C # - назначение - PullRequest
7 голосов
/ 18 марта 2010

Как это сделать в c #?

Допустим, у myclass есть:

private enum Days{};


1) Как добавить данные в перечисление внутри myclass с помощью конструктора? Как в:

myclass my = new myclass(Monday,Friday);

чтобы перечисление внутри класса получало свойства "Monday, Friday".


2) Можно ли также создать свойство для перечисления внутри класса после его инициализации? Например:

my.Days = new enum Days(Tuesday); //where the old settings are replaced.

EDIT:

Я хочу сделать следующее:

Иметь перечисление в основном классе, например, перечисление Дней {понедельник, вторник, среда, четверг, пятница};

У меня также есть что-то внутри myclass (enum?), Чтобы я мог присваивать некоторые значения из перечисления Days внутреннему myclass (enum?) Только с некоторыми, но не со всеми значениями в перечислении Days.

Так что я могу получить myclass, который содержит (enum?) С "Monday, Tuesday", в то время как некоторые myclass222 содержат (enum?) "Friday" и т. Д.

Я не знаю, является ли enum правильным способом сделать это внутри классов myclass?

Ответы [ 4 ]

11 голосов
/ 18 марта 2010

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

[Flags]
public enum Days
{
    None = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 4,
    Thursday = 8,
    Friday = 16,
    Saturday = 32,
    Sunday = 64
}

Теперь, если у вас есть член типа Days, вы можете назначить ему комбинированное значение:

Days someDays = Days.Monday | Days.Wednesday;

Обновление
По запросу; Вот как проверить, установлено ли определенное значение:

bool wednesdayIsSet = (someDays & Days.Wednesday) == Days.Wednesday;

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

public class SomeClass
{
    [Flags]
    public enum Days
    {
        None = 0,
        Monday = 1,
        // and so on
    }
}

public class SomeOtherClass
{
    public SomeClass.Days SomeDays { get; set; }
}
8 голосов
/ 18 марта 2010

1) Вы не можете. Перечисление должно быть определено во время компиляции

Похоже, вы могли бы вместо этого искать AttributeCollection. (посмотрите на ответ Фредрика Мёрка, о котором я пытался говорить;))

2) my.Days = Days.Tuesday

2 голосов
/ 18 марта 2010

Не могу сказать из вопроса, но, возможно, вы намереваетесь что-то вроде этого:

  1. Определение перечисления с днями

    публичные перечисления Дней { Воскресенье, Понедельник, , , , }

  2. Создайте атрибут списка Дней в вашем классе

  3. Добавьте нужные дни в свой список, когда они вам нужны
0 голосов
/ 18 марта 2010

Кажется, это то, что я хочу сделать. Вопрос в том, определен ли enum Days в моем "основном классе", как я могу иметь член Дней внутри другого "myclass класс ", чтобы я мог использовать myclass.someDays = Days.Monday?

хорошо, если предположить, что ваш главный класс - mainClass, и вы предоставили apt права доступа, тогда в зависимости от определения enum, т.е. 1. Если это статично, то myclass.someDays = mainClass.Days.Monday; 2. иначе вы должны получить к нему доступ через объект mainClass mainClass mc = new mainClass (); myclass.someDays = mc.Days.Monday;

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