在 C# 中,是否有其他方法来链接相互关联的“if”块?

ssd*_*ssd 0 c#

例如,有 5 个(或更多)任务(方法)返回truefalse;如果任何连续的方法返回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块替代是否可以接受?

Jon*_*art 7

这里最简单的建议是快速失败:

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)

除此之外,它实际上取决于被调用的方法链。如果它们都具有相同的签名并采用相同的参数,则可以将它们放入一个数组中并在循环中调用。