我只是好奇.ToUpper()是如何工作的?是否有某种映射,较低的a具有UTF代码XYZ,而较高的UTF代码XYZ 1?
答案 0 :(得分:3)
是的,它正在使用Unicode元数据。每个字符(Unicode代码点)都有一个案例以及案例映射到大写和小写(以及标题大小写)。 .NET使用此信息将字符串转换为大写或小写。您可以在Unicode Character Database中找到相同的信息。
答案 1 :(得分:0)
String.ToUpper只使用核心中的CurrentCulture
。
从String.ToUpper()
构建mscorelib.dll
的反汇编版本,您可以看到:
public string ToUpper(CultureInfo culture)
{
if (culture == null)
{
throw new ArgumentNullException("culture");
}
return culture.TextInfo.ToUpper(this);
}
因此,这取决于您的当前文化。总有一个适当的超载,你可以指定替代文化。
编辑
在内部,它使用 native 实现调用nativeChangeCaseString
函数。它是如何在内部实现的,我不知道,因为它可以由开发它的人来回答。
根据@Tim的建议添加指向
的链接TextInfo.ToUpper 提供了有关主题的更多信息。
答案 2 :(得分:0)
这已经在StackOverflow之前(以循环方式)的方式提出过。当然,它不是关于C#或.NET,而是回答了这个问题的Unicode部分。
答案 3 :(得分:0)
如果您对ToUpper()实现的设计方面感兴趣,那么您可以参考以下部分:
如果您对实际实现感兴趣,那么您可以参考Java语言的java.lang.String类部分的开源实现 - 这相当于C#字符串实用程序类。
以下是可以找到java.lang.String类源代码的链接 - 有2个重载方法:toUpper()和toUpper(Locale)。内部toUpper()使用默认语言环境调用toUpper(Locale),因此您会对第二种方法感兴趣。
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java
希望这些信息有所帮助。