题
这是我的代码:
internal enum WindowsMessagesFlags {
WM_EXITSIZEMOVE = 0x00000232,
WM_DISPLAYCHANGE = 0x0000007e,
WM_MOVING = 0x00000216,
}
protected override void WndProc(ref Message m) {
switch(m.Msg) {
case (int)WindowsMessagesFlags.WM_DISPLAYCHANGE:
FixWindowSnapping();
break;
case (int)WindowsMessagesFlags.WM_EXITSIZEMOVE:
SaveWindowProperties();
break;
case (int)WindowsMessagesFlags.WM_MOVING:
KeepProperLocation(ref m);
break;
}
}
反正是有为防止铸?
解决方案
排序的 - 投m.Msg代替:
protected override void WndProc(ref Message m) {
switch((WindowsMessagesFlags) m.Msg) {
case WindowsMessagesFlags.WM_DISPLAYCHANGE:
FixWindowSnapping();
break;
case WindowsMessagesFlags.WM_EXITSIZEMOVE:
SaveWindowProperties();
break;
case WindowsMessagesFlags.WM_MOVING:
KeepProperLocation(ref m);
break;
}
}
您需要投在所有的原因是因为在C#枚举不仅仅是数字 - 他们与该类型相关联的数字。这可以防止操作的方式(无铸造):
HttpStatusCode status = someWindowsMessageFlag;
这显然是一件好事:)当你需要,但是,你可以随时去“内经”(在这种情况下INT)的基本类型。
其他提示
什么是Message.Msg定义为α
我打赌它是的Int32。
我也投注WindowsMessagesFlags是您的类型,但消息是从所述框架。
这意味着你用你自己的枚举提供了一个框架,构建的目标,当然,他们将有关于类型的一些不兼容。
的枚举是强类型,而不仅仅是的数,它是一个使用一个名称中的上下文号。这个名字,上下文,数量,部分不只是数字直接兼容,这就是为什么你需要转换。
一个原因是因为C#目前(4.0)不允许你要写一个隐含的操作过多(一个铸)内的一个扩展方法(相关的问题)用于任何类型,包括一枚举。这将是很好干净转向/从Int16时将与一个弱类型的数据库,例如或类型的弱化的格式,(二进制作家).
不隶属于 StackOverflow