gpt4 book ai didi

C# 字符串比较不适用于尾部斜杠

转载 作者:行者123 更新时间:2023-11-30 21:59:08 24 4
gpt4 key购买 nike

在 C# 4.0 中,每当我比较两个尾部有一个或多个斜杠的字符串时,比较都会给出错误的结果:

String a = "1/2.1/";
String b = "1/2/";
if (a.CompareTo(b) > 0)
MessageBox.Show("Correct: " + a + " > " + b);
else
MessageBox.Show("Not correct: " + a + " <= " + b);

a = a.TrimEnd('/');
b = b.TrimEnd('/');

if (a.CompareTo(b) > 0)
MessageBox.Show("Trailing slash removed. Correct: " + a + " > " + b);
else
MessageBox.Show("Trailing slash removed. Not correct: " + a + " <= " + b);

从词汇上讲,“1/2.1/”在“1/2/”之后,没有太多疑问。

这种行为也发生在其他地方,例如使用 Select 方法对数据表进行排序。

我做错了什么吗?或者这是 .Net 中的错误?它甚至不应该与文化特定信息等有任何关系,因为斜线是最基本的美国 ASCII 字符集的一部分。

我在比较 SQL Server hierarchyID 时遇到了这个问题。这个问题很容易解决,但却是一个有点令人吃惊的问题。

最佳答案

Lexically speaking, "1/2.1/" comes after "1/2/", and there is not much question about that.

为什么会在后面呢?关于ASCII chart , /. 之后立即出现.

给定以下两个字符串,在到达第 4 个字符之前它们是相等的。然后 /.进行比较,/更伟大。所以您看到的结果 ( a < b) 实际上是正确的。

1/2.1/
1/2/

调用TrimEnd()后,你最终得到两个不同的字符串 where 和 a > b .

1/2.1
1/2

关于C# 字符串比较不适用于尾部斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29589537/

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