Добавление нескольких значений к переменной типа Enum

#c# #enums

#c# #перечисления

Вопрос:

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

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

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

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

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

// Вывод 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();

    }
}
  

Комментарии:

1. разве вы не должны пометить перечисление атрибутом [Flags]?

2. Я думаю, что на ваш вопрос был дан ответ.

3. Может быть, этот пример тоже? codeproject.com/Articles/386634 /…

Ответ №1:

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

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

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

Смотрите Руководство по программированию на C # для получения дополнительной информации.

Ответ №2:

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

Ответ №3:

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

Ответ №4:

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

Если вам нужно несколько дней, сделайте их таким образом, в двоичном стиле:

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

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

Комментарии:

1. Смотрим на определение атрибута Flags… Это определенно чистое решение

Ответ №5:

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

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