我重构了这段代码,使用了一个开关,但它看起来仍然很笨拙。现在我正在寻找一种简化它的方法
public async Task CheckAvailability()
{
switch (Settings.Mode)
{
case Enums.MO.Learn:
if (await IsLearn())
{
await ShowFirstMessageAsync();
return;
}
break;
case Enums.MO.Practice:
if (await IsPractice())
{
await ShowFirstMessageAsync();
return;
}
break;
case Enums.MO.Quiz:
if (await IsQuiz())
{
await ShowFirstMessageAsync();
return;
}
break;
default:
break;
}
await PickCard();
}
有没有人能想出一种更简单的方法来实现这一点,而不需要多个调用来等待ShowFirstMessageAsync?
这是在C#8:中使用switch
表达式的好机会
var shouldShowFirstMessage = Settings.Mode switch
{
Enums.MO.Learn => await IsLearn(),
Enums.MO.Practice => await IsPractice(),
Enums.MO.Quiz => await IsQuiz(),
_ => false
}
if (shouldShowFirstMessage) {
await ShowFirstMessageAsync();
} else {
await PickCard();
}
也许这个:
public async Task CheckAvailability()
{
bool showFirstMessage = false;
switch (Settings.Mode)
{
case Enums.MO.Learn:
showFirstMessage = await IsLearn();
break;
case Enums.MO.Practice:
showFirstMessage = await IsPractice();
break;
case Enums.MO.Quiz:
showFirstMessage = await IsQuiz();
break;
default:
break;
}
if (showFirstMessage)
{
await ShowFirstMessageAsync();
return;
}
await PickCard();
}