2014-01-29 138 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[…]返回a 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

这与这个问题有什么关系,更不用说回答了? –