【发布时间】:2011-01-21 04:55:34
【问题描述】:
我的问题很简单,但我没有找到一种方法来按照我想要的方式实现我的代码。所以我开始怀疑我要实现的代码是否不好。如果是,最好的方法是什么。
这里是:
class InputManager
{
SortedDictionary<ushort,Keys> inputList = new SortedDictionary<ushort,Keys>();
public void Add(ushort id, Keys key) {...}
public bool IsPressed(ushort id) {...}
}
class Main
{
private enum RegisteredInput : ushort
{
Up,
Down,
Confirm
}
public Main()
{
InputManager manager = new InputManager();
manager.Add(RegisteredInput.Up, Keys.Q);
manager.Add(RegisteredInput.Down, Keys.A);
manager.Add(RegisteredInput.Confirm, Keys.Enter);
}
void update()
{
if(manager.IsPressed(RegisteredInput.Up)) action();
}
}
这段代码无法编译,会出现这种错误:
“InputManager.Add(ushort, Keys)”的最佳重载方法匹配有一些无效参数
参数“1”:无法从“RegisteredInput”转换为“ushort”
如果我使用 manager.Add((ushort)RegisteredInput.Up, Keys.Q); 中的演员表,它将起作用。但是因为强制转换必须是明确的,所以我想知道它是否不像在 C++ 中那样在 C# 中推荐代码,以及是否有更好的方法(比如对每个值使用 const ushort,我有点不喜欢很多)。
到目前为止,我得到的最佳答案来自 this thread,但这听起来很像 hack,我很担心。
谢谢!
【问题讨论】:
-
为什么字典没有定义为
Dictionary<RegisteredInput, Keys>?另外,当你询问事情时,尽量避免将错误消息和代码重新输入网站,你做错了我们会挂断电话的机会就在那里。就像...异常消息实际上是否用 3 d 命名了方法“Addd”?我们如何相信您会实际复制所使用的实际代码,而不是重新输入完全有其他问题的简化代码? -
因为我不想重复键。关于错误消息,我没有重新输入,只是从中删除了很多不相关的命名空间。我还更改了方法的真实名称,因为它们不是英文的。
-
我不明白您所说的“重复键”是什么意思。你能详细说明一下吗?
-
嗯,一开始我似乎没有正确理解您的建议。对不起!我以为你在质疑是否使用 Dictionary 而不是 SortedDictionary。您的建议与 Adam Robinson 和 leppie 那里的建议几乎相同。再次抱歉!