作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
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
等最佳答案
因为不是每个字符都适合 C#
字符。例如,"𠀀"
需要 2 个 C# chars
,而仅通过 char
重载您无法获得有关该字符的任何信息。使用 String
和索引,这些方法可以查看索引 i
处的字符是否为高代理项 char
,然后读取低代理项 char
在下一个索引处,add them up according to the algorithm ,并检索有关代码点的信息 U+20000
.
这就是 UTF-16 可以编码 100 万个不同代码点的方式,它是一种可变宽度编码。编码一个字符需要 2-4 个字节,或 1-2 个 C# 字符。
关于c# - 为什么每个 Char static "Is..."都有一个字符串重载,例如IsWhiteSpace(字符串,Int32)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13955816/
我是一名优秀的程序员,十分优秀!