.NET中的标志枚举

时间:2009-04-10 19:52:26

标签: c# enums

我正在尝试使用一组条件语句来设置[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 个答案:

答案 0 :(得分:17)

你需要初始化m。创建一个值为0的“None”标志:

Media m = Media.None;

然后是你的其余代码。

答案 1 :(得分:2)

你也可以写:

Media m = default(Media)

在您不知道枚举,类或是否为值/引用类型的情况下很有用。

答案 2 :(得分:1)

如果没有条件,则m将是未定义的。将其设置为初始值。

答案 3 :(得分:1)

你有像filterOptions.ShowNone这样的'默认'吗?如果是这样,从m设置开始。编译器抱怨所有if的结尾,m可能没有设置为任何东西。

答案 4 :(得分:0)

除了上述答案之外,除了这段代码看起来非常多余的事实之外,我还建议您使用Select Case而不是所有那些丑陋的If。。

答案 5 :(得分:-4)

您实际上不需要创建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;