我有一个C#开关,在每个case返回之前,我需要调用一个方法.有什么办法可以简化这件事吗



我重构了这段代码,使用了一个开关,但它看起来仍然很笨拙。现在我正在寻找一种简化它的方法

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();
}

最新更新