如何在.NET 7中重现.NET Framework的字符串排序行为?
问题:.NET 7迁移后保持与.NET Framework 4.8字符串排序行为一致
我有运行在.NET Framework 4.8上的遗留代码,负责对产品编码排序后存入数据库字段,该代码已运行多年,积累的数据无法修改。现在需要将其迁移到.NET 7,必须保证排序行为完全一致。
代码与结果对比
测试代码
new[] { "123-CAT", "123CAT" }.OrderBy(x => x).ToArray();
.NET Framework 4.8 运行结果
[ "123CAT", "123-CAT" ]
.NET 7 运行结果
[ "123-CAT", "123CAT" ]
已尝试的StringComparer测试
我尝试了多种文化对应的StringComparer,均无法得到期望的["123CAT", "123-CAT"]结果,测试情况如下(标注***的为期望结果):
// .NET Framework: 123CAT, 123-CAT *** // .NET 7 : 123-CAT, 123CAT var list_default = new[] { "123-CAT", "123CAT" }.OrderBy(x => x).ToArray(); // .NET Framework: 123CAT, 123-CAT *** // .NET 7 : 123-CAT, 123CAT var list_currentCulture = new[] { "123-CAT", "123CAT" }.OrderBy(x => x, StringComparer.CurrentCulture).ToArray(); // .NET Framework: 123CAT, 123-CAT *** // .NET 7 : 123-CAT, 123CAT var list_invariant = new[] { "123-CAT", "123CAT" }.OrderBy(x => x, StringComparer.InvariantCulture).ToArray(); // .NET Framework: 123-CAT, 123CAT // .NET 7 : 123-CAT, 123CAT var list_ordinal = new[] { "123-CAT", "123CAT" }.OrderBy(x => x, StringComparer.Ordinal).ToArray();
根据ASCII表,"123-CAT"本应排在前面(-的ASCII码为45),.NET 7的行为符合此规则,但我需要匹配.NET Framework的排序行为。目前仅能让.NET Framework匹配.NET 7的结果(使用StringComparer.Ordinal),但无法反向实现。
内容的提问来源于stack exchange,提问作者Simon_Weaver
相关产品推荐
相关产品推荐

