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