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
, о котором я прочитал общий blerb, но все еще неясно, что он здесь делает, и если это связанный с проверкой верхней границы. -
TargetedPatchingOptOutAttribute
отсутствует в других методахIs...(char)
. ПримерIsLetter
,IsNumber
и т.д.