我有一个C#开关,在每种情况返回之前,我需要调用一个方法。有什么办法可以简化吗?

Ala*_*an2 1 c# switch-statement

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

    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();
    }
Run Code Online (Sandbox Code Playgroud)

有没有人能想到一种更简单的方法来实现此目的,而无需多次调用来等待ShowFirstMessageAsync?

Swe*_*per 6

这是在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();
}
Run Code Online (Sandbox Code Playgroud)