.ToUpper()是如何工作的?

时间:2012-07-12 11:44:10

标签: c# .net

我只是好奇.ToUpper()是如何工作的?是否有某种映射,较低的a具有UTF代码XYZ,而较高的UTF代码XYZ 1?

4 个答案:

答案 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部分。

How do you set strings to uppercase / lowercase in Unicode?

答案 3 :(得分:0)

如果您对ToUpper()实现的设计方面感兴趣,那么您可以参考以下部分:

  • 来自Gang of Four设计模式目录的FlyWeight设计模式用于处理与角色相关的功能
  • 根据此设计模式,集合中的每个单元都被设计为具有已定义行为的对象,最终对象是较小单元的集合
  • 对于String - 给定的String实际上是作为字符数组处理的,其中每个字符都是具有已定义行为的对象
  • 当我们调用ToUpper()时,使用这种设计模式,它遍历字符串的字符,并在内部将调用委托给每个字符。在字符上调用ToUpper时,String类还传递Locale的引用,其中包含字符映射和编码的详细信息

如果您对实际实现感兴趣,那么您可以参考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

希望这些信息有所帮助。