2010-06-23 1 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]"); 
      } 

Он выполняет еще пункт. Похоже, что сравнение строк на самом деле не работает в этом случае даже ты как строка (e.KeyCode.ToString() и Program.KeyboardTradeHotkey одинаковы.

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

+0

Вы проверили результаты 'e.KeyCode.ToString()' и 'Program.KeyboardTradeHotKey', чтобы убедиться, что a) корпус тот же, и b) нет начальных или конечных пробелов? – ChrisF

+0

[14: 31: 11.107988] - [Клавиатура] [PRESS] | Oemtilde | True | Oemtilde | True Escape Оказывается, в переменной есть \ n. Не знаю, как это получилось. Но самое забавное, что файл журнала показывал его точно так же, но когда я вставил его сюда, он показал, что после Oemtilde есть \ n после того, как Trim() исправил его. – MadBoy

ответ

3

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

+1

На самом деле журнал не показывал какой-либо разницы, но когда я скопировал его из своего файла журнала и вставил его здесь, кажется, что есть новая строка после Oemtilde, поэтому с помощью .Trim() это работает. Благодарю. – MadBoy

4

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

снабжать струной, тетивой и т.п.
string1.Equals(string2) 
0

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

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

+0

Статья предлагает для == для строк: «Итак, когда вы должны использовать какой оператор? Мое правило состоит в том, что для почти всех ссылочных типов используйте Equals, если вы хотите проверить равенство, а не ссылочный идентификатор. Исключение составляет для строк - сравнение строк с символом == делает вещи намного проще и читабельнее, но вам нужно помнить, что обе стороны оператора должны быть выражением типа string, чтобы заставить сравнение работать правильно ». просто нужно быть осторожным. – MadBoy

0

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

+0

Возвращает строку, если вы преобразуете ее в строку. Если вы нажмете F1, он покажет F1, если вы нажмете 'вы получите Oemtilde и т. Д. У меня появилась новая строка, которая странная. – MadBoy

 Смежные вопросы

  • Нет связанных вопросов^_^