使内回调返回(Making a return inside callback)

2019-10-17 20:29发布

public static string GetFoo() {

        string source = GameInfoUtil.GetSource(repairRequest, () => {
            return "0"; // this line gives error
        });
        .
        .
        MORE WORK, BUT WANT TO SKIP IT
    }


public static string GetSource(WebRequest request, Action failureCallback) {
        // DOING WORK HERE WITH REQUEST
        if(WORK IS SUCCESSFULL) RETURN CORRECT STRING ELSE CALL ->
        failureCallback();
        return "";
    }

我想这样做smthing这样的,但它给我的错误:

Error   2   Cannot convert lambda expression to delegate type 'System.Action' because some of the return types in the block are not implicitly convertible to the delegate return type.
Error   1   Since 'System.Action' returns void, a return keyword must not be followed by an object expression   C:\Users\Jaanus\Documents\Visual Studio 2012\Projects\Bot\Bot\Utils\GameInfoUtil.cs 58  5   Bot

我想做的事情,就是当事情发生在GameInfoUtil.GetSource ,它会叫出我的委托,和GetFoo方法将返回,而不是继续工作。

Answer 1:

Action委托返回void。 您正在试图返回字符串“0”。

如果你改变Action ,以Func<string>和返回值。

public static string GetSource(WebRequest request, Func<string> failureCallback) {
    // DOING WORK HERE WITH REQUEST
    if(!(WORK IS SUCCESSFULL))
    {
        return failureCallback();
    }
    return "";
}

您的代码将工作。

在lambda中的代码不能从外部函数返回。 内部拉姆达被转换为一个普通的方法(带有无法形容名称)。

public static string GetFoo() {
    string source = GameInfoUtil.GetSource(repairRequest, () => {
        return "0"; // this line gives error
    });
}

相当于

public static string GetFoo() {
    string source = GameInfoUtil.GetSource(repairRequest, XXXYYYZZZ);
}

public static string XXXYYYZZZ()
{
    return "0";
}

现在你可以很容易理解为什么return "0"不能从返回的getFoo。



Answer 2:

一个Action代表应返回void。 你不能返回一个字符串。 你可以把它改成Func<string>

string source = GameInfoUtil.GetSource(repairRequest, () => {
        return "0";
    });

public static string GetSource(WebRequest request, Func<string> failureCallback)
{
    if( <some condition> )
        return failureCallback(); // return the return value of callback
    return "";
}


文章来源: Making a return inside callback