代码之家  ›  专栏  ›  技术社区  ›  MadBoy

字符串比较工作不正常?

  •  0
  • MadBoy  · 技术社区  · 15 年前

    我在用这个 library 为了钩住键,我在将e.keycode.toString()与相同的字符串进行比较时遇到了一些问题。

    我有个变量,它是字符串等价的

    Keys.Oemtilde -gt; 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)是相同的,字符串比较似乎也不能真正起作用。

    为什么会这样?

    4 回复  |  直到 15 年前
        1
  •  3
  •   Anemoia    15 年前

    我认为这是因为keycode.toString()不会返回您期望的返回值。看看手表上的景色。

        2
  •  4
  •   Pranay Rana    15 年前

    另一个更改是使用string.equals函数比较字符串

    string1.Equals(string2)
    
        3
  •  0
  •   Dan Iveson    15 年前

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

    我也同意Pranay_Stacker。

        4
  •  0
  •   Scott Lance    15 年前

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