Это мой код:
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 при интеграции, например, со слабо типизированной базой данных или со слабо типизированным форматом сериализации (двоичный писатель).