Cast Keys对象枚举Direction对象?

2 c# enums casting

我创建了一个Direction这样的枚举:

enum Direction { Up, Down, Left, Right }
Run Code Online (Sandbox Code Playgroud)

现在按箭头键按下调用这些指示.我现在所拥有的KeyDown是:

if (e.KeyCode == Keys.Up)
{
    moveDirection = Direction.Up;
}
else if (e.KeyCode == Keys.Left)
{
    moveDireciton = Direction.Left;
}
else if ...
Run Code Online (Sandbox Code Playgroud)

有可能创建我自己的演员(Direction)Keys.Up吗?

我知道我可以创建一个静态方法static Direction CastKeysToDirection(Keys k);,我对此很好,但我只是好奇是否有办法在c#中实现我们自己的转换?

Raw*_*ing 7

如果将枚举定义为

enum Direction {
    Up = Keys.Up,
    Down = Keys.Down,
    Left = Keys.Left,
    Right = Keys.Right
}
Run Code Online (Sandbox Code Playgroud)

那么你的演员(Direction)Keys.Up应该Keys.Up是因为底层的数值与底层的数值相同Direction.Up.

可悲的是,你不能提供一个真实的explicitimpilcit演员表上的enum你可以class.


Jon*_*eet 5

两种选择:

  • 如果您确定值匹配(例如,因为您已Direction使用Keys.Upetc作为值创建了枚举),则强制转换:

    moveDirection = (Direction) e.KeyCode;
    
    Run Code Online (Sandbox Code Playgroud)
  • 创建字典:

    private static readonly Dictionary<Keys, Direction> KeyToDirection =
        new Dictionary<Keys, Direction>
        {
            { Keys.Up, Direction.Up },
            { Keys.Left, Direction.Left },
            ...
        };
    
    Run Code Online (Sandbox Code Playgroud)

    然后只需查看字典中按下的键即可.(TryGetValue用于查找Keys- 使用返回值来检测字典中不存在的键.)

当然,后者提供了更灵活的方法.例如,它允许您将多个键映射到同一方向.