我有这样定义的标志枚举:印刷标志枚举为独立的标志
[Flags]
public enum MyEnum
{
None = 0x00,
Choice1 = 0x01,
Choice2 = 0x02,
Choice3 = 0x04,
Default = Choice1 | Choice2,
All = Default | Choice3
}
我想一个方法来打印出该标志被包含在MyEnum.Default
。在这种情况下,我希望输出结果类似于“Choice1,Choice2”。
简单打印MyEnum.Default.ToString()
的问题是,当我想要“Choice1,Choice2”时,输出将是“默认”。
这里有一个选项,但如果我使用这个选项,每次更改枚举时都必须更新打印。
((StudyData.Choice1 & StudyData.Default) == StudyData.Choice1 ? StudyData.Choice1.ToString() : "") + ", " +
((StudyData.Choice2 & StudyData.Default) == StudyData.Choice2 ? StudyData.Choice2.ToString() : "") + ", " +
((StudyData.Choice3 & StudyData.Default) == StudyData.Choice3 ? StudyData.Choice3.ToString() : "")
有没有人有更干净的方式做到这一点?理想情况下,我想要打印包含在MyEnum.Default
中的标志,而不必在每次添加新标志或更改默认值时更改打印代码。
谢谢!
不错...和无耻地被盗为未来的参考。 – 2011-04-04 19:06:51
请注意,如果您的枚举具有负值(例如使用Visual Studio扩展性框架,Microsoft.VisualStudio.Shell.Interop._VSRDTFLAGS),那么在此使用ulong和ToUInt64会导致问题。如果用long和ToInt64替换,那么它将处理负值的枚举。 – Nerdtron 2017-11-06 15:34:35