gpt4 book ai didi

C# 8 开关表达式 : Handle multiple cases at once?

转载 作者:太空宇宙 更新时间:2023-11-03 20:49:28 25 4
gpt4 key购买 nike

C# 8 引入了模式匹配,我已经找到了使用它的好地方,比如这个:

private static GameType UpdateGameType(GameType gameType)
{
switch (gameType)
{
case GameType.RoyalBattleLegacy:
case GameType.RoyalBattleNew:
return GameType.RoyalBattle;
case GameType.FfaLegacy:
case GameType.FfaNew:
return GameType.Ffa;
default:
return gameType;
}
}

然后变成

private static GameType UpdateGameType(GameType gameType) => gameType switch
{
GameType.RoyalBattleLegacy => GameType.RoyalBattle,
GameType.RoyalBattleNew => GameType.RoyalBattle,
GameType.FfaLegacy => GameType.Ffa,
GameType.FfaNew => GameType.Ffa,
_ => gameType;
};

但是,您可以看到我现在不得不提到 GameType.RoyalBattleGameType.Ffa 两次。有没有办法在模式匹配中一次处理多个案例?我在想这样的事情,但它不是有效的语法:

private static GameType UpdateGameType(GameType gameType) => gameType switch
{
GameType.RoyalBattleLegacy, GameType.RoyalBattleNew => GameType.RoyalBattle,
GameType.FfaLegacy, GameType.FfaNew => GameType.Ffa,
_ => gameType;
};

我也尝试过类似的东西

[GameType.RoyalBattleLegacy, GameType.RoyalBattleNew] => GameType.RoyalBattle

GameType.FfaLegacy || GameType.FfaNew => GameType.Ffa

但没有一个是有效的。

也没有找到这方面的例子。它甚至受支持吗?

最佳答案

从 C#9 开始,您可以通过“disjunctive or”模式完全按照您的意愿行事:

private static GameType UpdateGameType(GameType gameType) => gameType switch
{
GameType.RoyalBattleLegacy or GameType.RoyalBattleNew => GameType.RoyalBattle,
GameType.FfaLegacy or GameType.FfaNew => GameType.Ffa,
_ => gameType;
};

进一步阅读:

关于C# 8 开关表达式 : Handle multiple cases at once?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56920902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com