与此相似的东西引诱我们:
"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”评估为真呢?
答案 0 :(得分:4)
并非this == value
返回true
,CompareInfo.IsPrefix
documented为true
String.Empty
{}返回{{1}}:
每个字符串以a开头和结尾 空子串(“”);因此,如果 prefix是一个空字符串,这个方法 返回true。
答案 1 :(得分:0)
为什么你认为"this == value" evaluate to true?
我认为这种行为是正确的。任何字符串都可以被认为是以空字符串开头。
答案 2 :(得分:0)
实际上FooBar以string.Empty开头。可以认为任何字符串都以string.Empty开头,以及0 + a = a。