Добавление нескольких значений в переменную типа Enum - PullRequest
3 голосов
/ 02 мая 2011

http://msdn.microsoft.com/en-us/library/cc138362.aspx

Я ссылаюсь на код, указанный выше, который показывает добавление значений в Enum Type. но это не работает на моем конце. Ожидается вывод кода: Я получаю фактический вывод:

Пожалуйста, используйте код: **
// Ожидаемый результат: дни собраний: вторник, четверг, пятница

// Фактический результат: дни собраний - пятница

// Ожидаемый результат: дни собраний: четверг, пятница

// Actaul Результат: дни собраний - понедельник **

     class Program
{
    enum Days2
    {
        None = 1,
        Sunday = 2,
        Monday = 3,
        Tuesday = 4,
        Wednesday = 5,
        Thursday = 6,
        Friday = 7,
        Saturday = 8
    }



    static void Main(string[] args)
    {
        Days2 meetingDays = Days2.Tuesday | Days2.Thursday;

        // Initialize with two flags using bitwise OR.
        meetingDays = Days2.Tuesday | Days2.Thursday;

        // Set an additional flag using bitwise OR.
        meetingDays = meetingDays | Days2.Friday;


        Console.WriteLine("Meeting days are {0}", meetingDays);
        // Expected Output: Meeting days are Tuesday, Thursday, Friday
        **// Actual Output: Meeting days are  Friday**

        // Remove a flag using bitwise XOR.
        meetingDays = meetingDays ^ Days2.Tuesday;
        Console.WriteLine("Meeting days are {0}", meetingDays);

        // Expected Output: Meeting days are Thursday, Friday
        **// Actaul Output: Meeting days are Monday**

        Console.ReadLine();

    }
}

Ответы [ 5 ]

10 голосов
/ 02 мая 2011

Чтобы иметь возможность использовать побитовые операции для объединения значений перечисления, они должны иметь значения, соответствующие степени двух.

Кроме того, вы должны пометить перечисление атрибутом Flags и по соглашению использовать ноль в качестве «флагов не установлено».Пример:

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

Подробнее см. Руководство по программированию C # .

2 голосов
/ 02 мая 2011

Посмотрите на значение Days2.Tuesday | Days2.Thursday; Оно должно быть 10. Побитовое И по сути является дополнением.

Если вы хотите несколько дней, сделайте их так, в двоичном стиле:

enum Days2
{
    None = 0,
    Sunday = 1,
    Monday = 2,
    Tuesday = 4,
    Wednesday = 8,
    Thursday = 16,
    Friday = 32,
    Saturday = 64    
}

Или используйте атрибут Flags, как указано другими.

2 голосов
/ 02 мая 2011

Вы забыли использовать FlagsAttribute!

2 голосов
/ 02 мая 2011

Добавьте атрибут [Flags] в ваше перечисление.

1 голос
/ 02 мая 2011

Отметьте перечисление атрибутом [Flags].

[Flags]
enum Days2
{
    None = 0,
    Sunday = 1,
    Monday = 2,
    Tuesday = 4,
    Wednesday = 8,
    Thursday = 16,
    Friday = 32,
    Saturday = 64
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...