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