C# - Can/Should 我 simplify/alter 这个代码片段?
C# - Can/Should I simplify/alter this code snippet?
我的程序中得到了以下代码:
#region Handle
if(HandleLink(input))
goto Handled;
else if(HandlePath(input))
goto Handled;
else if(HandleGeneratedLink(input))
goto Handled;
else ...
else
return; // Break if not handled
#endregion
Handled:
我对此不是很满意,因为对我来说,每隔一行使用一个 goto 似乎是一种作弊。
有没有一种通用的方法来编写这样的东西,或者这是一个有效的解决方案?
试试这个
if(HandleLink(input) || HandlePath(input) || HandleGeneratedLink(input))
goto Handled;
else
return;
你可以这样做:
if (HandleLink(input) || HandlePath(input) || HandleGeneratedLink(input)) {
// put the code below the "Handled" label here
} else {
return;
}
由于 ||
仅在左操作数为假时计算右操作数,因此当 HandleLink()
returns 为真时 HandlePath()
将不会被调用。它就像您的 if...else if
语句一样工作!
或者,您可以创建一个名为 handled
:
的变量
var handled = false;
if (HandleLink(input) || HandlePath(input) || HandleGeneratedLink(input)) {
handled = true;
} else {
return;
}
if (handled) {
// move the code below the "Handled" label here.
}
您也可以这样做:
if (!HandleLink(input) && !HandlePath(input) && !HandleGeneratedLink(input)) {
return;
}
// put the code related to "Handled" here
我的程序中得到了以下代码:
#region Handle
if(HandleLink(input))
goto Handled;
else if(HandlePath(input))
goto Handled;
else if(HandleGeneratedLink(input))
goto Handled;
else ...
else
return; // Break if not handled
#endregion
Handled:
我对此不是很满意,因为对我来说,每隔一行使用一个 goto 似乎是一种作弊。 有没有一种通用的方法来编写这样的东西,或者这是一个有效的解决方案?
试试这个
if(HandleLink(input) || HandlePath(input) || HandleGeneratedLink(input))
goto Handled;
else
return;
你可以这样做:
if (HandleLink(input) || HandlePath(input) || HandleGeneratedLink(input)) {
// put the code below the "Handled" label here
} else {
return;
}
由于 ||
仅在左操作数为假时计算右操作数,因此当 HandleLink()
returns 为真时 HandlePath()
将不会被调用。它就像您的 if...else if
语句一样工作!
或者,您可以创建一个名为 handled
:
var handled = false;
if (HandleLink(input) || HandlePath(input) || HandleGeneratedLink(input)) {
handled = true;
} else {
return;
}
if (handled) {
// move the code below the "Handled" label here.
}
您也可以这样做:
if (!HandleLink(input) && !HandlePath(input) && !HandleGeneratedLink(input)) {
return;
}
// put the code related to "Handled" here