我创建了一个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#中实现我们自己的转换?
如果将枚举定义为
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.
可悲的是,你不能提供一个真实的explicit或impilcit演员表上的enum你可以class.
两种选择:
如果您确定值匹配(例如,因为您已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- 使用返回值来检测字典中不存在的键.)
当然,后者提供了更灵活的方法.例如,它允许您将多个键映射到同一方向.