2014-01-29 6 views
1

У меня есть строковой переменной, как показано ниже:C# странное поведение строки?

string testVar = "abc "; 

Тогда у меня есть if заявление, как показано ниже:

if(this.testVar[this.testVar.Length-1].Equals(" ")) 

Из вышесказанного я пытаюсь найти, если последний символ пространства, если это пространство, затем что-то делать. Но это всегда ложно, даже если мой testVar = "abc "?

+0

вы сравниваете 'char' и' string' –

+0

Вы не сравнили бы символ и строку там? – Alexander

+0

Если вы хотите включить все символы пробела, такие как пробелы, вкладки или новые строки, используйте: 'if (Char.IsWhiteSpace (this.testVar.Last()) ...' (что также более читаемо imho) –

ответ

9

testVar[…] возвращает char, не string. Вот почему тест Equals с string всегда возвращает false. Вы можете легко это исправить, сравнивая с char. Вы также не должны Equals:

if (testVar[testVar.Length - 1] == ' ') 

Это ничего не стоит, что, если бы вы использовали == первоначально вместо Equals, вы получили бы время ошибки в компиляции с описанием проблемы. Это хорошо иллюстрирует, почему полезно использовать раннее связывание, а не позднее связывание (Equals принимает object и, следовательно, не предлагает проверку типа компиляции).

1

Это всегда неверно, потому что char никогда не совпадает с string.

Это будет работать:

if (this.testVar[this.testVar.Length-1].Equals(' ')) 

или это

if (this.testVar[this.testVar.Length-1] == ' ') 
4

Почему вы не просто использовать:

if (testVar.EndsWith (" ")) 
0

проверить этот чувак

var result = str.Substring(str.LastIndexOf(' ') + 1); 
+0

Как это относится к вопросу, не говоря уже об этом? –

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