[英]Switch case instead of if else
如何将此代码switch
到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
语句中读取会更好看。
由于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;
}
}
重要的是要实现以下(取自MSDN )关于switch
语句:
每个案例标签指定一个常量值 。 switch语句将控制权转移到switch部分,其case标签与switch表达式的值匹配(示例中为caseSwitch)。 如果没有案例标签包含匹配值,则控件将转移到默认部分( 如果有) 。 如果没有默认部分,则不执行任何操作,并且控制权在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;
}
}
不,你不能在交换机案例中使用逻辑运算符。 它只能运行一个值
你唯一能做的就是:
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?
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.