我有一个代码:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.Alt|Keys.D1:
if (this._condition1)
{
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
break;
case Keys.Control |Keys.U:
if (this._condition2)
{
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
break;
default:
return base.ProcessCmdKey(ref msg, keyData);
}
return true;
Run Code Online (Sandbox Code Playgroud)
它让我在休息时"检测到无法访问的代码"警告.
在这里不使用break运算符是一种好习惯吗?我不想关闭"检测到无法访问的代码"警告.
PS:我的ProcessCmdKey方法有很多种情况.
Aka*_*ava 19
有你的码连续3条可达语句,前两个是break语句,最后一个诠释他的最后一行"返回true"也无法访问,我不知道C#编译器是否检测到或没有,但在逻辑上是没有办法最后一个返回声明也将达成.
有多种方法可以解决这个问题,
更好的设计方式
如果在switch case中返回值,可能很难在以后由你或其他人分析你的代码,通常最好保留一个返回值temp变量并在函数结束时返回它,这样就更容易调试和理解新编码器的代码.
交换机可能很复杂,并且交换机内的更多返回可能没有更好的控制,如果要实现日志记录,调试,从案例返回可能会很复杂.并且它成为难以浏览逻辑流程图的方法.
所以最好避免返回altogather,但仍然依赖于situtations,需要在这里做出明智的决定.
Dan*_*vil 18
break如果case语句中的所有路径都以a 结尾,则不是必需的return.不要使用它,否则你会收到上述警告.
在这种情况下,好的做法imho将结束每个案例的回报,如下所示:
case Keys.Alt|Keys.D1:
bool result;
if (this._condition1)
{
result = true;
}
else
{
result = base.ProcessCmdKey(ref msg, keyData);
}
return result;
Run Code Online (Sandbox Code Playgroud)
要么
case Keys.Alt|Keys.D1:
bool result = (this._condition1)
? true
: base.ProcessCmdKey(ref msg, keyData);
return result;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17398 次 |
| 最近记录: |