我正在使用这个library来挂钩键,我在将e.KeyCode.ToString()与相同的字符串进行比较时遇到了一些问题。
我有变量,其字符串相当于
Keys.Oemtilde
- >
Program.KeyboardTradeHotkey = "Oemtilde";
我把它保存在字符串中,因为我从xml文件中读取了该字符串,我似乎无法将字符串转换为Keys
。
如果我这样使用它:
if (e.KeyCode.Equals(Keys.Oemtilde)) {
Logging.AddToLog("[Keyboard][Check] " + e.KeyCode);
} else {
// failed to catch - executes else
Logging.AddToLog("[Keyboard][PRESS]");
}
它工作正常,并执行Logging.AddToLog("[Keyboard][Check] " + e.KeyCode);
。
如果我使用它:
if (e.KeyCode.ToString() == Program.KeyboardTradeHotkey) {
Logging.AddToLog("[Keyboard][Check] " + e.KeyCode);
} else {
// failed to catch - executes else
Logging.AddToLog("[Keyboard][PRESS]");
}
它执行else子句。看起来String Compare在这种情况下确实不起作用,即使你们两个字符串(e.KeyCode.ToString()和Program.KeyboardTradeHotkey都是相同的。
这可能是什么原因?
答案 0 :(得分:4)
另一个更改是使用string.Equals函数来比较字符串
string1.Equals(string2)
答案 1 :(得分:3)
我认为这是因为KeyCode.ToString()没有返回您期望它返回的内容。看一下Watch中的视图。
答案 2 :(得分:0)
==和.Equals()之间的区别是由于引用类型和值类型之间的差异。此链接提供了不同结果的示例:Comparison of == and .Equals()
我也同意pranay_stacker。
答案 3 :(得分:0)
无需查看您使用的第一个(工作)代码示例库,看起来它正在比较枚举值,因此它返回的是数字而不是字符串。