gpt4 book ai didi

C# 使用相同值的多个键打开枚举

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

我已经搜索过如何在 C# 中对值而不是枚举键进行切换,但没有结果,我发现的所有帖子都说我们不需要使用该值,我们可以使用 key 。

但在我的例子中,我想使用该值,因为我使用多个共享相同值的键进行了枚举,代码如下:

public enum PlayerPosition {
North = 0,
Top = 0,
South = 1,
Bottom = 1,
East = 2,
Right = 2,
West = 3,
Left = 3
}


switch (obj.PlayerPosition)
{
case PlayerPosition.North:
// some code
break;
case PlayerPosition.South:
// some code
break;
case PlayerPosition.East:
// some code
break;
case PlayerPosition.West:
// some code
break;
default:
throw new ArgumentOutOfRangeException();
}

我认为这是可行的,但我觉得它不太可读...

我想实现的是这样的:

switch (obj.PlayerPosition)
{
case PlayerPosition.Top:
case PlayerPosition.North:
// some code
break;
case PlayerPosition.Bottom:
case PlayerPosition.South:
// some code
break;
case PlayerPosition.Right:
case PlayerPosition.East:
// some code
break;
case PlayerPosition.Left:
case PlayerPosition.West:
// some code
break;
default:
throw new ArgumentOutOfRangeException();
}

上面的示例不起作用,因为它是一个重复的 case 标签。我怎样才能做到这一点?

编辑:在此枚举中,北/上、南/下完全相同,它们只是代表玩家围绕一张有 4 把椅子的 table 的位置。但是我们有使用 North/South/East/West 的旧配置文件和使用 Top/Bottom/Right/Left 的新配置文件。

最佳答案

我在 dotnetfiddle 中对此进行了测试: 只需使用新成员即可:

public enum MyEnum
{
North = 0, //old
Top = 0, //new
South = 1, //old
Bottom = 1 //new
}

public static void Main()
{
// Parse "old" from XML config (simulated)
MyEnum test = (MyEnum)Enum.Parse(typeof(MyEnum),"North");
// = MyEnum.North

switch(test)
{
case MyEnum.Top:
Console.WriteLine("NORTH");
break;
case MyEnum.Bottom:
Console.WriteLine("SOUTH");
break;
default:
Console.WriteLine("Unsupported!");
break;

}
}

将输出“NORTH”。

编辑

简单说说您面临的实际问题:向下兼容性。我要做的是在启动时检查配置是否与您当前的程序版本兼容。如果不是:通过“升级”功能(保存旧配置的备份,然后)将配置转换为当前版本并将它们保存回磁盘。

关于C# 使用相同值的多个键打开枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49130416/

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