gpt4 book ai didi

c# - 为什么每个 Char static "Is..."都有一个字符串重载,例如IsWhiteSpace(字符串,Int32)?

转载 作者:可可西里 更新时间:2023-11-01 07:44:34 26 4
gpt4 key购买 nike

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);
}

三件事让我印象深刻:

  1. 为什么只对上限进行限制检查?抛出 ArgumentOutOfRangeException,而索引低于 0 将给出字符串的标准 IndexOutOfRangeException
  2. 出现在SecuritySafeCriticalAttribute我已经阅读了一般的 blerb,但仍然不清楚它在这里做什么以及它是否与上限检查相关联。
  3. TargetedPatchingOptOutAttribute 不存在于其他 Is...(char) 方法中。示例 IsLetterIsNumber

最佳答案

因为不是每个字符都适合 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com