有没有办法使用少于字符串?

时间:2011-02-17 10:39:42

标签: c# .net

使用string.CompareTo(字符串)我可以稍微解决这个问题,但不容易阅读,我已阅读过locallity设置可能会影响结果。

有没有办法简单地使用<或者>在2个字符串上以更直接的方式?

4 个答案:

答案 0 :(得分:3)

您可以重载运算符,但很少应该这样。对我来说"stringA" > "stringB"并不意味着该死的东西,它对IMO的可读性没有帮助。这就是为什么运算符重载指南建议如果含义不明显,不要重载运算符。

编辑:Operator Overloading Usage Guidelines

另外,在String的情况下,我担心你不能看到它,因为你只能在定义方法的类中放置运算符重载方法。 如果CompareTo的语法困扰你,可能将它包装在扩展方法中会解决你的问题吗?

就像那样:

public static bool IsLessThan(this string str, string str2) {
    return str.Compare(str2) < 0;
}

我仍然觉得这对读者来说很困惑。 最重要的是,您不能为String重载运算符。通常你可以做一些事情,比如声明一个部分并填充你的重载,但是String是一个密封的类,所以不是这次。我认为合理名称的扩展方法是您最好的选择。您可以在其中放置CompareTo或一些自定义逻辑。

答案 1 :(得分:2)

在我看来,CompareTo是正确的方法,您可以使用重载来指定特定于文化的参数......

答案 2 :(得分:2)

您在评论中提到您正在将两个字符串与“A100”和“B001”形式的值进行比较。由于VB 6实现字符串比较的方式,这适用于使用<>运算符的旧版VB 6代码。

算法非常简单。它遍历字符串,一次一个字符,并比较每个字符的ASCII值。一旦发现一个字符串中的字符的ASCII码低于另一个字符串中的相应字符,则比较停止并且第一个字符串被声明为“小于”第二个字符串。 (通过将Option Compare Text语句放在左上角,可以强制VB 6根据系统的当前语言环境执行不区分大小写的比较 相关的代码模块,但这是的默认设置。)

当然很简单,但不完全是逻辑。比较ASCII值会跳过你现在可能在字符串中找到的各种有趣的东西;即非ASCII字符。由于您似乎正在处理其内容具有预定义限制的字符串,因此在您的特定情况下这可能不是问题。但更一般地说,编写像strA < strB这样的代码对任何需要维护代码的人来说都是完全无稽之谈(看起来你已经拥有这种体验),而我鼓励你做“正确的事情”,即使你正在处理一组固定的输入。

在字符串值上使用<>没有“直截了当”的说法。如果您需要实现此功能,则必须自己完成。按照我在上面使用VB 6描述的算法,您可以编写自己的比较函数并在代码中调用它。遍历字符串中的每个字符,确定它是字符还是数字,并将其转换为适当的数据类型。从那里,您可以比较两个已解析的值,并转到字符串中的下一个索引或返回“相等”值。

答案 3 :(得分:1)

我认为还有另一个问题:

Assert.IsFalse(10 < 2);  
Assert.IsTrue("10" < "2");  

(第二个Assert假设您对字符串类的<运算符执行了重载。)
但是运营商否则建议!!
我同意Dyppl:你不应该这样做!