6

.ToUpper()はどのように機能しますか?下のaがUTFコードXYZを持ち、上のaがUTFコードXYZ1を持っているというある種のマッピングはありますか?

4

4 に答える 4

3

はい、Unicodeメタデータを利用しています。すべての文字(ユニコードコードポイント)には、大文字と小文字(およびタイトルの大文字小文字)への大文字と小文字のマッピングがあります。.NETはこの情報を使用して、文字列を大文字または小文字に変換します。Unicode文字データベースにもまったく同じ情報があります。

于 2012-07-12T11:54:41.907 に答える
0

String.ToUpperCurrentCultureはinコアを使用するだけです。

のフォーム分解バージョンString.ToUpper()mscorelib.dllあなたはこれを見ることができます:

public string ToUpper(CultureInfo culture)
{
    if (culture == null)
    {
        throw new ArgumentNullException("culture");
    }
    return culture.TextInfo.ToUpper(this);
}

ですから、それはあなたの現在の文化に依存します。オルタナティブカルチャーを指定できる場所には、常に適切な過負荷があります。

編集

内部的には、ネイティブ実装nativeChangeCaseStringで最後に関数を呼び出します。それは内部でどのように実装されているのか、私にはわかりません。それは、それを開発した人が答えることができるものだからです。

@Timが提案したように、次のリンクを追加します

TextInfo.ToUpperは、件名に関する詳細情報を提供します。

于 2012-07-12T11:51:58.333 に答える
0

これは、StackOverflowで以前に(ラウンドアバウトで)質問されました。確かに、それはC#や.NETに関するものではありませんが、この質問のUnicode部分に答えます。

Unicodeで文字列を大文字/小文字に設定するにはどうすればよいですか?

于 2012-07-12T11:53:46.123 に答える
0

ToUpper()実装の設計面に興味がある場合は、次のセクションを参照できます。

  • Gang of FourデザインパターンカタログのFlyWeightデザインパターンは、キャラクター関連の機能を処理するために使用されます
  • このデザインパターンに従って、コレクション内の各ユニットは、動作が定義されたオブジェクトとして設計され、最終的なオブジェクトは、より小さなユニットのコレクションです。
  • 文字列の場合-指定された文字列は実際には文字の配列として処理されます。各文字は定義された動作を持つオブジェクトです。
  • ToUpper()を呼び出すときにこのデザインパターンを使用すると、文字列の文字を繰り返し処理し、呼び出しを各文字に内部的に委任します。文字列でToUpperを呼び出すときに、Stringクラスは文字コード表とエンコーディングの詳細を含むロケールの参照も渡します。

実際の実装に興味がある場合は、Java言語のjava.lang.Stringクラス部分のオープンソース実装を参照できます。これは、C#文字列ユーティリティクラスと同等です。

以下は、java.lang.Stringクラスのソースコードを見つけることができるリンクです。2つのオーバーロードされたメソッドがあります:toUpper()とtoUpper(Locale)。内部的にtoUpper()はデフォルトのロケールでtoUpper(Locale)を呼び出すため、2番目のメソッドが重要になります。

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java

この情報がお役に立てば幸いです。

于 2012-07-12T12:32:12.360 に答える