You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:20:21