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