如何在 bool 方法上解析 "not all code paths return a value"?

How to resolve "not all code paths return a value" on bool method?

我添加了一个 bool 方法,它提供执行 OAuth 身份验证和 returns 真或假。基于用户和密码检查的结果。

但是我在 LoginService() 方法上遇到错误,指出:

'MongoDBApp.Services.AuthenticationService.LoginService(string, string)': not all code paths return a value

我在谷歌上搜索了错误,结果显示这是因为正如错误所说,该方法没有 return 方法中定义的值 return 类型。

我已经检查了这个方法,它 return 在每个 condition.It 处都是真或假,似乎 bool 值没有在 [=] 之外被 returned 15=]内部方法。

有谁知道为什么该方法没有收到布尔值 returned?

这是 LoginService() 类型 return bool:

    private bool LoginService(string username, string password)
    {

        string ConnectionName = "Username-Password-Authentication";

        auth0.LoginAsync(connection: ConnectionName, userName: username, password: password).ContinueWith(t =>
        {
            if (t.IsFaulted)
            {
                return false;
            }
            else
            {
                Messenger.Default.Send<UpdateLoginMessage>(new UpdateLoginMessage());
                return true;                  
            }

        },

       TaskScheduler.FromCurrentSynchronizationContext());
    }

您的 LoginService 方法中没有 return truereturn false,这是编译器所抱怨的。 (您确实有 return truereturn false,但它们不在 LoginService 中,它们在您传递给 ContinueWith 的 lambda 中,并且该 lambda 是单独的方法。)

但更糟糕的是,您正在启动一个 LoginAsync 调用以在后台线程中完成它的工作,然后立即从您的 LoginService 方法返回 在此之前 LoginAsync - 或您注册的延续 - 已完成。这几乎肯定不是你想要的。

你真正需要的是一个async方法:

private async Task<bool> LoginServiceAsync(string username, string password)
{
    string ConnectionName = "Username-Password-Authentication";

    try {
        var result = await auth0.LoginAsync(
            connection: ConnectionName, userName: username, password: password);
        Messenger.Default.Send<UpdateLoginMessage>(new UpdateLoginMessage());
        return true;                  
    } catch {
        return false;
    }
}

(在没有 至少 记录异常的情况下将异常转换为布尔结果也是一个糟糕的主意,但我没有弄乱你的那部分逻辑。)

来电者会说:

var loginResult = await LoginServiceAsync(username, password);

此时您的所有代码都将成功等待异步调用完成。