切换大小写而不是其他
本文关键字:其他 大小写 | 更新日期: 2023-09-27 18:33:30
如何将此代码转换为switch
案例?
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_HOTKEY && (int)m.WParam == 1)
Console.WriteLine("w");
else if (m.Msg == WM_HOTKEY && (int)m.WParam == 2)
Console.WriteLine("a");
else if (m.Msg == WM_HOTKEY && (int)m.WParam == 3)
Console.WriteLine("s");
else if (m.Msg == WM_HOTKEY && (int)m.WParam == 4)
Console.WriteLine("d");
base.WndProc(ref m);
}
这是我最后一次尝试,第一个案例上的行再次标记为红色
switch (m.Msg)
{
case m.Msg == WM_HOTKEY && (int)m.WParam == 1:
Console.WriteLine("w");
break;
case m.Msg == WM_HOTKEY && (int)m.WParam == 2:
Console.WriteLine("a");
break;
case m.Msg == WM_HOTKEY && (int)m.WParam == 3:
Console.WriteLine("s");
break;
case m.Msg == WM_HOTKEY && (int)m.WParam == 4:
Console.WriteLine("d");
break;
}
这可能吗?我认为在switch
声明中阅读会更好看。
您无法打开条件。您只能打开常量值。
if (m.Msg == WM_HOTKEY)
{
switch ((int)m.WParam)
{
case 1:
Console.WriteLine("w");
break;
case 2:
Console.WriteLine("a");
break;
case 3:
Console.WriteLine("s");
break;
case 4:
Console.WriteLine("d");
break;
}
}
由于 Msg
的值始终相同(在您的条件下),您可以尝试以下操作:
if(m.Msg == WM_HOTKEY)
{
switch ((int)m.WParam)
{
case 1:
Console.WriteLine("w");
break;
case 2:
Console.WriteLine("a");
break;
case 3:
Console.WriteLine("s");
break;
case 4:
Console.WriteLine("d");
break;
}
}
重要的是要意识到以下有关switch
语句的内容(取自 MSDN):
每个事例标签指定一个常量值。开关语句 将控制权转移到机箱标签与 开关表达式的值(示例中为大小写开关)。如果没有案例 标签包含匹配值,控件被转移到默认值 部分,如果有的话。如果没有默认部分,则不执行任何操作 采取和控制转移到 switch 语句之外。
不,您不能在开关大小写中使用逻辑运算符。它只对单个值<</p>
您在这里唯一能做的是:
if(m.Msg == WM_HOTKEY)
{
var param = (int)m.WParam;
switch(param)
{
case 1:
Console.WriteLine("w");
break;
....
}
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_HOTKEY)
{
var param = (int)m.WParam;
switch (param)
{
case 1:
Console.WriteLine("w");
break;
case 2:
Console.WriteLine("a");
break;
case 3:
Console.WriteLine("s");
break;
case 4:
Console.WriteLine("d");
break;
default:
Console.WriteLine("Unrecognised key stroke.");
}
base.WndProc(ref m);
}
// todo: What if m.Msg is no WM_HOTKEY?
}