http://msdn.microsoft.com/en-us/library/1x308yk8.aspx
这允许我这样做:
var str = "string ";
Char.IsWhiteSpace(str, 6);
而不是:
Char.IsWhiteSpace(str[6]);
似乎不寻常,所以我查看了反射:
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public static bool IsWhiteSpace(char c)
{
if (char.IsLatin1(c))
{
return char.IsWhiteSpaceLatin1(c);
}
return CharUnicodeInfo.IsWhiteSpace(c);
}
[SecuritySafeCritical]
public static bool IsWhiteSpace(string s, int index)
{
if (s == null)
{
throw new ArgumentNullException("s");
}
if (index >= s.Length)
{
throw new ArgumentOutOfRangeException("index");
}
if (char.IsLatin1(s[index]))
{
return char.IsWhiteSpaceLatin1(s[index]);
}
return CharUnicodeInfo.IsWhiteSpace(s, index);
}
三件事让我印象深刻:
- 为什么只对上限进行限制检查?抛出
ArgumentOutOfRangeException
, 而低于 0 的索引将给出字符串的标准IndexOutOfRangeException
- 我已经阅读了一般性
SecuritySafeCriticalAttribute
的问题,但仍然不清楚它在这里做什么以及它是否与上限检查相关联。 TargetedPatchingOptOutAttribute
Is...(char)
在其他方法上不存在。例子IsLetter
等IsNumber
_