C#中String.CompareOrdinal与String.Compare(StringComparison.Ordinal)是否等价?
Are String.CompareOrdinal(strA, strB) and String.Compare(strA, strB, StringComparison.Ordinal) equivalent in C#?
绝对等效!这两个调用在功能、性能以及底层实现上完全是一回事,你完全可以放心互换使用。
如果你去查看.NET的参考源代码(不管是.NET Framework还是.NET Core/.NET 5+),会发现String.Compare(strA, strB, StringComparison.Ordinal)在处理Ordinal这个比较类型时,内部直接就调用了CompareOrdinal方法,没有额外的分支逻辑或者处理步骤。
举个实际的代码例子验证一下:
var strA = "Hello"; var strB = "hello"; int ordinalResult = string.CompareOrdinal(strA, strB); int compareOrdinalResult = string.Compare(strA, strB, StringComparison.Ordinal); Console.WriteLine(ordinalResult == compareOrdinalResult); // 输出 True
两者的核心逻辑都是基于字符的Unicode码点数值做逐字符对比,完全不考虑文化区域规则、大小写映射(如果是OrdinalIgnoreCase才会处理大小写,但这里是普通的Ordinal),纯粹按照字符的原始二进制值来判断大小,所以返回的结果100%一致。
至于官方文档没明确提这一点,确实有点小遗憾,但从实现的本质来看,它们就是同一个逻辑的两种调用方式而已。
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

