出于好奇,只是一个简短的问题。
string str = "string";
Console.WriteLine(str.EndsWith(string.Empty)); //true
Console.WriteLine(str.LastIndexOf(string.Empty) == str.Length); //false
//of course string are indexed from 0,
//just wrote if for fun to check whether empty string get some extra index
///somehow by a miracle:)
//finally
Console.WriteLine(str.LastIndexOf(string.Empty)
== str.LastIndexOf('g')); //true :)
答案 0 :(得分:17)
确定此字符串实例的结尾是否与指定的字符串匹配。
所有字符串将在末尾匹配""
...或字符串的任何其他部分。为什么?因为从概念上讲,每个角色周围都有空字符串。
"" + "abc" + "" == "abc" == "" + "a" + "" + "b" + "" + "c" + ""
更新
关于您的上一个示例 - LastIndexOf
上记录了这一点:
如果value为String.Empty,则返回值是此实例中的最后一个索引位置。
一个相关的问题是使用null作为字符串终止符 - 它发生在C和C ++中,而不是C#。
来自MSDN - String Class (System)
:
在.NET Framework中,String对象可以包含嵌入的空字符,这些字符计为字符串长度的一部分。但是,在某些语言(如C和C ++)中,空字符表示字符串的结尾;它不被视为字符串的一部分,也不算作字符串长度的一部分。
答案 1 :(得分:6)
试试这个:
string str = "string";
Console.WriteLine(str.EndsWith(string.Empty)); //true
Console.WriteLine(str.LastIndexOf(string.Empty) == str.Length-1); // true
Console.ReadLine();
所以是的,如Oded所说,他们总是匹配。
答案 2 :(得分:2)
以这种方式思考:LastIndexOf
对于空字符串来说是没有意义的。你可以说空字符串存在于每个字符之间的字符串中的每个索引处。 documentation因此为应该返回的内容提供了明确的答案:
如果值为String.Empty,则返回 value是最后一个索引位置 这个例子。
至少在这种情况下,它会返回实际索引。如果它返回字符串的长度(表示索引“在结尾之后”,我相信这是你的观点),它将返回一个名为LastIndexOf
的方法的结果,该方法甚至不是索引。
这是另一种看待它的方式:如果我有这个:
Dim index As Integer = str.LastIndexOf("")
...然后我应该能够做到这一点:
Dim substr As String = str.Substring(index, "".Length)
...然后回到""
。果然,当LastIndexOf
返回字符串中的 last 索引时,它可以正常工作。 如果它返回字符串的长度,我会得到 编辑:好吧,看起来我错了。希望我的第一点足够强大;)ArgumentOutOfRangeException
。
答案 3 :(得分:0)
this question及其答案中有更多信息。
特别是"Indeed, the empty string logically occurs between every pair of characters."