【发布时间】:2016-10-19 02:31:59
【问题描述】:
在 .NET Framework 4.5 中,由 Trim() 方法调用的私有 TrimHelper() 方法使用以下条件来确定字符是否需要修剪:(.NET Reflector 的反编译代码)
if (!char.IsWhiteSpace(this[start]) && !IsBOMWhitespace(this[start]))
我想知道为什么 IsBOMWhitespace 方法总是返回 false?
private static bool IsBOMWhitespace(char c)
{
return false;
}
这是微软计划在未来改变/扩展的东西吗?例如通过检查字符是否为例如'\uFEFF' 并在这种情况下返回 true?
【问题讨论】:
-
如答案所示,您发布的好像是源代码的内容并不是源代码。这是由反编译器生成的代码,除非这样呈现,否则会使问题非常具有误导性。
-
看起来像是错误修复的副作用。 SSCLI20 发行版中可用的 String.cs 的早期副本错误地将 '\ufeff' 归类为空白。对该代码的注释表明此错误是由 Resgen.exe 问题的解决方法引起的
-
@Hans Passant:为什么将 \uFEFF 归类为空白是不正确的?
-
它是一个格式化字符,它不会产生可见的空白。
-
@Hans Passant:谢谢。然而,他们删除了更多的字符,例如来自 Trim() 的 '\u200C' 我相信这会给许多客户带来问题。