C# - 可以/应该简化/更改此代码段吗?

时间:2016-10-22 06:47:26

标签: c# coding-style goto simplify

我的程序中有以下代码:

#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似乎是一种欺骗。 有没有一种常见的方式来编写这样的东西,或者这是一个有效的解决方案吗?

3 个答案:

答案 0 :(得分:2)

您也可以这样做:

if (!HandleLink(input) && !HandlePath(input) && !HandleGeneratedLink(input)) {
    return;
}
// put the code related to "Handled" here

答案 1 :(得分:1)

您可以这样做:

if (HandleLink(input) || HandlePath(input) || HandleGeneratedLink(input)) {
    // put the code below the "Handled" label here
} else {
    return;
}

由于||仅在左操作数为假时才计算右操作数,因此HandlePath()返回true时将不会调用HandleLink()。它就像你的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.
}

答案 2 :(得分:0)

试试这个

if(HandleLink(input) || HandlePath(input) || HandleGeneratedLink(input))
 goto Handled;
else
 return;