C# 字符串比较无法正常工作?

C# 字符串比较无法正常工作?,c#,string-comparison,C#,String Comparison,我用它来钩住键,在比较e.KeyCode.ToString()和同一个字符串时遇到了一些问题 我有一个变量,它是字符串的等价物 Keys.Oemtilde-> Program.KeyboardTradeHotkey=“Oemtilde” 我将其保存在字符串中,因为我从xml文件中读取了该字符串,但似乎无法将该字符串转换为键 如果我这样使用它: if (e.KeyCode.Equals(Keys.Oemtilde)) { Loggin

我用它来钩住键,在比较e.KeyCode.ToString()和同一个字符串时遇到了一些问题

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

Keys.Oemtilde
->
Program.KeyboardTradeHotkey=“Oemtilde”

我将其保存在字符串中,因为我从xml文件中读取了该字符串,但似乎无法将该字符串转换为

如果我这样使用它:

            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子句。在这种情况下,字符串比较似乎不起作用,即使字符串(例如,KeyCode.ToString()和Program.KeyboardTradeHotkey)是相同的


原因可能是什么?

我认为这是因为KeyCode.ToString()不会返回您希望它返回的结果。请查看手表中的视图。

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

string1.Equals(string2)

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


我也同意pranay_stacker的观点。

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

您检查了
e.KeyCode.ToString()的结果了吗
编程。键盘贸易热键
以确保a)外壳相同,b)没有前导空格或尾随空格?[14:31:11.107988]-[Keyboard][按]| Oemtilde | True | Oemtilde | True转义结果表明变量中存在\n。不知道它是怎么到那里的。。但有趣的是,日志文件显示的是完全相同的,但当我将其粘贴到此处时,它显示Oemtilde之后有一个\n,所以Trim()修复了它。实际上,日志没有显示任何差异,但当我从日志文件复制它并粘贴到此处时,似乎Oemtilde之后有新行,所以使用.Trim()它可以工作。谢谢。如果你把它转换成字符串,它就会返回字符串。如果你按F1,它会显示F1,如果你按`你会得到Oemtilde等。我有一个新行,很奇怪它在那里。文章建议到==对于字符串:“那么,什么时候应该使用哪个操作符?我的经验法则是,对于几乎所有的引用类型,当您想要测试相等性而不是引用标识时,请使用Equals。字符串是个例外——将字符串与==进行比较确实会使事情变得非常简单和可读性更好,但您需要记住,运算符的两侧都必须是字符串类型的表达式,才能使比较正常工作。”只有一个需要小心。