为什么System.Windows.MessageBoxImage具有相同值的枚举子项?

我试图通过MessageBoxImage枚举编写我自己的抽象,并看到MessageBoxImage被定义为:

namespace System.Windows { public enum MessageBoxImage { None = 0, Error = 16, Hand = 16, Stop = 16, Question = 32, Exclamation = 48, Warning = 48, Asterisk = 64, Information = 64, } } 

Show方法如何确定是显示错误图像还是手形图像? 我如何编写一个需要MessageBoxImagetypes的方法,并返回一个映射到MessageBoxImagetypes的CustomMessageBoxImagetypes,因为我不能在同一个switch语句中同时包含MessageBoxImage.Error和MessageBoxImage.Hand?

Solutions Collecting From Web of "为什么System.Windows.MessageBoxImage具有相同值的枚举子项?"

历史上有不同的图标,最终被合并成一个实际的图标图像。 所以有几个枚举类型的值(例如Hand和Stop),它们在现代Windows操作系统中意味着同样的东西。 他们之间没有任何区别,他们只是别名。

如果你想有新的值来表示差异,那么你可以使用一个二级变量(例如“isError)来传达你想要在Stop和Hand之间应用的差异,或者你可以将Icon的值复制到一个int,并设置一个高位表示这个额外的信息,所以它可以在一个变量中“携带”,或者你可以使用自己的与MessageBoxIcon“无关”的枚举,并且有从你的值转换到MessageBoxIcon值的方法。

我建议拥有自己的“状态”值,然后根据需要将其转换为图标值 – 两者传达的信息十分不同,所以试图超载(损坏)MessageBox值来传递额外的信息不会是一个非常好的方法。

并非所有的枚举(错误,信息,停止和警告)在精简版框架中都可用。

如果您在完整的Windows客户端和Compact Framework客户端之间共享代码文件,则需要使用Asterisk,Exclamation,Hand,None或Question枚举。

https://msdn.microsoft.com/en-us/library/system.windows.forms.messageboxicon(v=vs.80).aspx