2010-06-23 50 views
0

我使用这个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子句。这似乎是字符串比较不会在这种情况下,真正起作用的,甚至你都串(e.KeyCode.ToString()和Program.KeyboardTradeHotkey是相同的。

什么可以这样做的原因?

+0

您是否检查过'e.KeyCode.ToString()'和'Program.KeyboardTradeHotKey'的结果,以确保a)套管是相同的并且b)没有前导或尾随空格? – ChrisF 2010-06-23 12:57:51

+0

[14:31:11.107988] - [键盘] [新闻] | Oemtilde | True | Oemtilde | True Escape 原来变量中有\ n。不知道它是如何到达那里..但有趣的是日志文件显示它完全相同,但是当我将它粘贴到此处时,它显示在Oemtilde之后有一个\ n,所以Trim()修复了它。 – MadBoy 2010-06-23 13:04:10

回答

3

我认为这是因为KeyCode.ToString()不会返回你期望的回报是什么,看看在观看视图。

+1

其实日志没有显示任何区别,但是当我从我的日志文件中复制它并粘贴在这里时,似乎在Oemtilde之后有新行,所以通过使用.Trim()它可以工作。谢谢。 – MadBoy 2010-06-23 13:06:44

4

另一个变化使用string.Equals的函数来比较字符串

string1.Equals(string2) 
0

==和.Equals()之间的区别是因为不同引用类型和值类型之间的差异。此链接给出了不同结果的示例:Comparison of == and .Equals()

我也同意pranay_stacker。

+0

文章建议==为字符串:“所以,什么时候应该使用哪个运算符?我的经验法则是对于几乎所有的引用类型,当您要测试等于而不是引用标识时使用Equals。使用==比较字符串确实使事情变得简单和可读性更高,但您需要记住,运算符的两侧必须是字符串类型的表达式才能使比较正常工作。“只需要注意一点。 – MadBoy 2010-06-23 13:48:11

0

无需查看使用第一个(工作)代码示例的库看起来就是比较枚举值,因此它返回的是数字而不是字符串。

+0

如果将其转换为字符串,则返回字符串。如果你按F1,它会显示F1,如果你按'你会得到Oemtilde等。我有新的线,这是奇怪的,它在那里。 – MadBoy 2010-06-23 13:10:01