为什么是“abcd”。StartsWith(“”) 返回 true?

2022-08-31 11:34:01

标题就是整个问题。有人能给我一个为什么会发生这种情况的原因吗?


答案 1

是 - 因为它确实以空字符串开头。实际上,空字符串在逻辑上出现在每对字符之间。

这样说吧:你能给出什么“开始”的定义来排除这种情况吗?以下是“开头为”的简单定义,但不会:

“如果 x 的第一个字符与 y 的字符匹配,则 x 以 y 开头。y.Length

另一个(等效的)定义:

“x 以 y 开头,如果x.Substring(0, y.Length).Equals(y)"


答案 2

我将尝试详细说明Jon Skeet所说的话。

假设 x、y 和 z 是字符串,+ 运算符实际上是串联,那么:

如果我们能拆分 z 来写 z = x + y,这意味着 z 从 x 开始。由于每个字符串 z 都可以拆分为 z = “” + z,因此每个字符串都以 “” 开头。

因此,因为(“”+ “abcd”)==“abcd”,所以“abcd”以“”开头