.NET 5.0 でのカルチャー依存文字列比較:
- Windows は NLS っていうライブラリを持ってて、これまで Windows 版の .NET Core はこれを使ってた。
- これまでも、非 Windows 環境の .NET Core は ICU っていうライブラリ(デファクト標準)を使ってた。
- .NET 5.0 で、Windows 上でも ICU を使うようになった。
一応、.NET 5.0 でも以下の設定を csproj に入れれば NLS 挙動に戻せはする。
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.UseNls" Value="true" />
</ItemGroup>
なので、
- Windows かどうか
- .NET Core 3.1 以前か .NET 5 以降か
- (.NET 5 では) UseNls オプションを入れるかどうか
で挙動が変わる。
なお悪いことに、
- IndexOf(string) は CurrentCulture を見た文字列比較
- Contains は Ordinal 比較(カルチャーとか関係なく、単純に Unicode 符号点の数値で比較)
と、メソッドごとにデフォルト挙動が違うそうで…