Сравнение строк не работает правильно? - PullRequest
0 голосов
/ 23 июня 2010

Я использую эту библиотеку для перехвата ключей, и у меня есть некоторые проблемы при сравнении 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 одинаковы.

В чем может быть причина этого?

Ответы [ 4 ]

4 голосов
/ 23 июня 2010

другое изменение использует строку. Функция Equals для сравнения строки

string1.Equals(string2)
3 голосов
/ 23 июня 2010

Я думаю, это потому, что KeyCode.ToString () не возвращает то, что вы ожидаете получить.Посмотрите на вид в часах.

0 голосов
/ 23 июня 2010

Без необходимости смотреть на библиотеку, в которой вы используете первый (рабочий) пример кода, похоже, что он сравнивает значения перечисления, поэтому он возвращает число вместо строки.

0 голосов
/ 23 июня 2010

Разница между == и .Equals () обусловлена ​​различиями между ссылочными типами и типами значений.Эта ссылка дает примеры различных результатов: Сравнение == и .Equals ()

Я также согласен с pranay_stacker.

...