如何在 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 true
或 return false
,这是编译器所抱怨的。 (您确实有 return true
和 return 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);
此时您的所有代码都将成功等待异步调用完成。
我添加了一个 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 true
或 return false
,这是编译器所抱怨的。 (您确实有 return true
和 return 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);
此时您的所有代码都将成功等待异步调用完成。