この質問は、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つ: