gpt4 book ai didi

c# - 长度为 1 的字符串比较给出的结果与字符比较不同……为什么?

转载 作者:可可西里 更新时间:2023-11-01 08:46:37 27 4
gpt4 key购买 nike

我是 C# 的新手,我在字符串比较中发现了一些我不太理解的意外情况。

有人能解释一下为什么字符之间的比较给出与以下代码中一个字符长度字符串的比较相反的结果吗?

我预计 "9" < "="将是 true (因为'9'(57)的unicode代码小于'='(61)的unicode代码)但它是错误的......字符串后面的比较逻辑是什么,为什么和字符比较不同?

代码:

bool resChComp = '9' < '=';
bool resStrComp = String.Compare("9", "=") < 0;

Console.WriteLine($"\n'9' < '=' : {resChComp}, \"9\" < \"=\" : { resStrComp }");

输出:

'9' < '=' : True, "9" < "=" : False

最佳答案

默认的字符串比较是进行“单词排序”。 From the documentation ,

The .NET Framework uses three distinct ways of sorting: word sort, string sort, and ordinal sort. Word sort performs a culture-sensitive comparison of strings. Certain nonalphanumeric characters might have special weights assigned to them. For example, the hyphen ("-") might have a very small weight assigned to it so that "coop" and "co-op" appear next to each other in a sorted list. String sort is similar to word sort, except that there are no special cases. Therefore, all nonalphanumeric symbols come before all alphanumeric characters. Ordinal sort compares strings based on the Unicode values of each element of the string.

您期望的比较是序号比较,您可以通过在 String.Compare 重载中使用 StringComparison.Ordinal 获得它,如下所示:

bool resStrComp = String.Compare("9", "=", StringComparison.Ordinal) < 0;

这将通过使用它们的 unicode 值来比较字符串,就像将一个字符与另一个字符进行比较一样。

关于c# - 长度为 1 的字符串比较给出的结果与字符比较不同……为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50376116/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com