C#中的错误 - “FooBar”.StartsWith(string.Empty)为true

时间:2011-03-07 14:32:53

标签: c# string

  

可能重复:
  Why does “abcd”.StartsWith(“”) return true?

与此相似的东西引诱我们:

"FooBar".StartsWith(string.Empty)

首先,我不认为它应该是真的,但我也不太确定为什么它是真的,看着“Reflector'ed”代码:

public bool StartsWith(string value, bool ignoreCase, CultureInfo culture)
{
    if (value == null)
    {
        throw new ArgumentNullException("value");
    }
    if (this == value)
    {
        return true;
    }
    CultureInfo info = (culture == null) ? CultureInfo.CurrentCulture : culture;
    return info.CompareInfo.IsPrefix(this, value, ignoreCase ? CompareOptions.IgnoreCase : CompareOptions.None);
}

ignoreCase为false且culture为null。那么为什么“this == value”评估为真呢?

3 个答案:

答案 0 :(得分:4)

并非this == value返回trueCompareInfo.IsPrefix documentedtrue String.Empty {}返回{{1}}:

  

每个字符串以a开头和结尾   空子串(“”);因此,如果   prefix是一个空字符串,这个方法   返回true。

答案 1 :(得分:0)

为什么你认为"this == value" evaluate to true?我认为这种行为是正确的。任何字符串都可以被认为是以空字符串开头。

答案 2 :(得分:0)

实际上FooBar以string.Empty开头。可以认为任何字符串都以string.Empty开头,以及0 + a = a。