我有如下一个字符串变量:C#奇怪的字符串行为?
string testVar = "abc ";
然后,我有如下一个if
声明:
if(this.testVar[this.testVar.Length-1].Equals(" "))
从上面我试图找到,如果最后一个字符是空间,若这是空间然后做一些事情。但是,即使我的testVar = "abc "
一直是假的?
我有如下一个字符串变量:C#奇怪的字符串行为?
string testVar = "abc ";
然后,我有如下一个if
声明:
if(this.testVar[this.testVar.Length-1].Equals(" "))
从上面我试图找到,如果最后一个字符是空间,若这是空间然后做一些事情。但是,即使我的testVar = "abc "
一直是假的?
testVar[…]
返回a char
而不是string
。这就是为什么Equals
测试string
总是返回false
。您可以通过与char
进行比较来轻松修复此问题。你也不必Equals
:
if (testVar[testVar.Length - 1] == ' ')
这是一文不值的是,如果你使用过==
最初代替Equals
,你会得到一个编译时错误说明问题。这很好地说明了为什么使用早期绑定而不是后期绑定(Equals
需要object
,因此不提供编译时类型检查)。
它始终是假的,因为一个char
是永远等于string
。
这会工作:
if (this.testVar[this.testVar.Length-1].Equals(' '))
或本
if (this.testVar[this.testVar.Length-1] == ' ')
你为什么不直接使用:
if (testVar.EndsWith (" "))
检查这家伙
var result = str.Substring(str.LastIndexOf(' ') + 1);
这与这个问题有什么关系,更不用说回答了? –
你正在比较'char'和'string' –
你不会比较字符和字符串吗? – Alexander
如果你想要包含空格,制表符或换行符等所有空白字符,可以使用:if(Char.IsWhiteSpace(this.testVar.Last()))...'(这也是更易读的imho) –