例如,有 5 个(或更多)任务(方法)返回true或false;如果任何连续的方法返回false,我正在使用算法语法来打破链,否则继续向内。目前,我已经构建了一堆 if 块,它们相互链接;然而,对我来说似乎很难看,并且很难通过一堆论点阅读。
if (Method_1_Returns(String manyArgs, ...) == true) {
if (Method_2_Returns(String manyArgs, ...) == true) {
if (Method_3_Returns(String manyArgs, ...) == true) {
if (Method_4_Returns(String manyArgs, ...) == true) {
...
}
else {
MethodToShowError(someString_4);
}
}
else {
MethodToShowError(someString_3);
}
}
else {
MethodToShowError(someString_2);
}
}
else {
MethodToShowError(someString_1);
}
Run Code Online (Sandbox Code Playgroud)
我打算将其转换为一个switch块,但除了讨厌该goto指令外,这似乎不符合编码标准(或者,是吗?)。
String temp = "1";
switch (temp) {
case "1":
if (Method_1_Returns(String manyArgs, ...)) goto case "2";
MethodToShowError(someString_1);
break;
case "2":
if (Method_2_Returns(String manyArgs, ...)) goto case "3";
MethodToShowError(someString_2);
break;
case "3":
if (Method_3_Returns(String manyArgs, ...)) goto case "4";
MethodToShowError(someString_3);
break;
case "4":
if (Method_4_Returns(String manyArgs, ...)) goto case "5";
MethodToShowError(someString_4);
break;
...
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
C# 中是否存在更好的替代方案?是switch块替代是否可以接受?
这里最简单的建议是快速失败:
if (!Method_1_Returns(String manyArgs, ...)) {
MethodToShowError(someString_1);
return;
}
if (!Method_2_Returns(String manyArgs, ...)) {
MethodToShowError(someString_2);
return;
}
if (!Method_3_Returns(String manyArgs, ...)) {
MethodToShowError(someString_3);
return;
}
if (!Method_4_Returns(String manyArgs, ...)) {
MethodToShowError(someString_4);
return;
}
Run Code Online (Sandbox Code Playgroud)
除此之外,它实际上取决于被调用的方法链。如果它们都具有相同的签名并采用相同的参数,则可以将它们放入一个数组中并在循环中调用。