4

我正在尝试使用一组条件语句来设置一个带有 [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;
4

6 回答 6

17

您需要初始化 m。创建一个值为 0 的“无”标志,然后:

Media m = Media.None;

然后是其余的代码。

于 2009-04-10T19:54:08.123 回答
2

你也可以写:

Media m = default(Media)

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

于 2009-04-10T20:15:03.813 回答
1

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

于 2009-04-10T19:54:00.230 回答
1

你有像 filterOptions.ShowNone 这样的“默认”吗?如果是这样,从设置 m 开始。编译器抱怨是因为在所有 if 的末尾,m 可能没有设置为任何值。

于 2009-04-10T19:54:49.667 回答
0

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

于 2009-04-10T20:06:44.333 回答
-5

你真的不需要创建一个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;
于 2009-04-10T20:04:09.177 回答