gpt4 book ai didi

c# - 如何将列表与 C# 中的每个枚举项相关联

转载 作者:太空宇宙 更新时间:2023-11-03 23:00:52 24 4
gpt4 key购买 nike

我有网站可以执行匹配操作。我正在编写代码以根据当前比赛阶段限制某些​​ Action 。例如,如果上半场是当前阶段,那么我应该限制没有下半场的直接结束比赛。对于每个阶段,我都有多个限制阶段。下面是我的阶段枚举。

public enum MatchStage
{
FirstHalfAssumedStartTime = 1,
FirstHalfAssumedEndTime = 2,
SecondHalfAssumedStartTime = 3,
SecondHalfAssumedEndTime = 4,
ExtraFirstHalfAssumedStartTime = 5,
ExtraFirstHalfAssumedEndTime = 6,
ExtraSecondHalfAssumedStartTime = 7,
ExtraSecondHalfAssumedEndTime = 8,
PauseStartTime = 9,
PauseEndTime = 10,
EndMatchTime = 11
}

我想让下面的方法起作用。我想调用类似 currentSiteCoreStage.RestrictedStages 的东西,它返回受限阶段列表。我怎样才能做到这一点?

public static bool IsProposedStageValid(MatchStage currentSiteCoreStage, MatchStage proposedStage )
{
if (currentSiteCoreStage.RestrictedStages.Contains(proposedStage)) // I am hoping to make this work
return false;
}

最佳答案

这里实际上是状态机。您可以创建方法,为您的应用程序支持的每个阶段定义可能的阶段转换。例如。 (当然你不必使用迭代器,你可以简单地从每个 case block 返回阶段数组):

public static IEnumerable<MatchStage> GetAvailableStageTransitions(MatchStage stage)
{
switch (stage)
{
case MatchStage.FirstHalfAssumedStartTime:
yield return MatchStage.FirstHalfAssumedEndTime;
yield return MatchStage.PauseStartTime;
yield break;
case MatchStage.SecondHalfAssumedStartTime:
yield return MatchStage.SecondHalfAssumedEndTime;
yield return MatchStage.PauseStartTime;
yield break;
// etc
default:
throw new NotSupportedException($"Stage {stage} is not supported.");
}
}

然后检查建议的阶段是否可用:

GetAvailableStageTransitions(currentSiteCoreStage).Contains(proposedStage)

根据系统的复杂性,您可以考虑将状态转换和与每个状态相关的逻辑封装到状态对象中。有关更多详细信息,请阅读 State Design Pattern .

关于c# - 如何将列表与 C# 中的每个枚举项相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43142236/

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