Флаги enum в .NET - PullRequest
       11

Флаги enum в .NET

4 голосов
/ 10 апреля 2009

Я пытаюсь использовать набор условных операторов, которые будут устанавливать перечисление, присвоенное [Flags] Тем не менее, компилятор жалуется, что «m» не назначен. Как я могу переписать следующее для достижения желаемой функциональности?

Media m;
if (filterOptions.ShowAudioFiles)
    m = m | Media.Audio;
if (filterOptions.ShowDocumentFiles)
    m = m | Media.Document;
if (filterOptions.ShowImageFiles)
    m = m | Media.Image;
if (filterOptions.ShowVideoFiles)
    m = m | Media.Video;

Ответы [ 6 ]

17 голосов
/ 10 апреля 2009

Вам нужно инициализировать m. Создайте флаг «Нет» со значением 0, затем:

Media m = Media.None;

Тогда остальная часть вашего кода.

2 голосов
/ 11 апреля 2009

Вы также можете написать:

Media m = default(Media)

Полезно в тех случаях, когда вы не знаете перечисление, класс или тип значения / ссылки.

1 голос
/ 10 апреля 2009

У вас есть «по умолчанию», как filterOptions.ShowNone? Если это так, начните с m, установленного на это. Компилятор жалуется, потому что в конце всех if, m может не быть установлено ничего.

1 голос
/ 10 апреля 2009

Если ни одно из условий не выполняется, m будет неопределенным. Установите его в начальное значение.

0 голосов
/ 11 апреля 2009

В дополнение к ответам выше, помимо того факта, что этот код кажется довольно избыточным, я хотел бы предложить вам использовать Select Case вместо всех этих уродливых If.

0 голосов
/ 11 апреля 2009

Вам не нужно создавать Media.None. Вы можете привести любое значение к перечислению Flag, даже если оно не равно значению флагов.

Media m = (Media)0;

if (filterOptions.ShowAudioFiles)     m |= Media.Audio; 

if (filterOptions.ShowDocumentFiles)  m |= Media.Document; 

if (filterOptions.ShowImageFiles)     m |= Media.Image; 

if (filterOptions.ShowVideoFiles)     m |= Media.Video;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...