18

この質問は、C#、.net Compact Framework 2、および Windows CE 5 デバイスに適用されます。

非常に異なる CE デバイスで何年も使用されていた .net DLL にバグがありましたが、問題はありませんでした。突然、新しい Windows CE 5.0 デバイスで、このバグが次のコードに現れました。

string s = "Print revenue receipt"; // has only single space chars 
int i = s.IndexOf("  "); // two space chars

私は i が -1 であることを期待していますが、これは、indexOf が突然 5 を返した今日までのことでした。

使用時はこの動作は発生しないので

int i = s.IndexOf("  ", StringComparison.Ordinal);

、これが文化に基づく現象であることは確かですが、この新しいデバイスがもたらす違いを認識できません。これは、既知のデバイスとほとんど同じバージョンです (より高速な CPU と新しいボードのみ)。

両方のデバイス:

  • 同一のローカリゼーションで Windows CE 5.0 を実行する
  • System.Environment.Version は '2.0.7045.0' を報告します
  • CultureInfo.CurrentUICulture および CultureInfo.CurrentCulture は「en-GB」をレポートします (「de-DE」でもテスト済み)
  • 「すべて」の関連するレジストリ キーは同じです。

新しいデバイスには CF 3.5 がプリインストールされており、その GAC ファイルの名前を実験的に変更しましたが、説明されている動作に変更はありませんでした。実行時には常にバージョン 2.0.7045.0 が報告されるため、これらのアセンブリは効果がないと考えられます。

これを修正するのは難しくありませんが、物事が魔法のように見えると我慢できません。私が見逃していたヒントはありますか?

編集:ますます見知らぬ人になっています。スクリーンショットを参照してください: スクリーンショット

もう1つ: スクリーンショット

4

3 に答える 3

4

序数検索を使用して既に答えがあると思います

    int i = s.IndexOf("  ", StringComparison.Ordinal);

String Classのドキュメントの小さなセクションを読むことができます。

String.StartsWith や String.IndexOf などの文字列検索メソッドも、カルチャに依存した、または序数に基づく文字列比較を実行できます。次の例は、IndexOf メソッドを使用した序数比較とカルチャに依存した比較の違いを示しています。現在のカルチャが英語 (米国) であるカルチャに依存した検索では、部分文字列 "oe" が合字 "œ" と一致すると見なされます。ソフト ハイフン (U+00AD) は幅がゼロの文字であるため、検索ではソフト ハイフンが Empty と同等に扱われ、文字列の先頭で一致が検出されます。一方、序数検索では、どちらの場合も一致が見つかりません。

于 2013-06-28T13:06:23.090 に答える