【发布时间】:2021-03-17 17:05:36
【问题描述】:
就我个人而言,我觉得 string.CompareTo() 使用和阅读都很烦人。
我喜欢阅读和写作:if (string1 > string2)
目前,我可以使用 ExtensionMethods 这个:
string a = "ABC";
string b = "BBC";
if ( a.IsGreaterThan(b) )
{
Console.WriteLine("a is greater than b");
}
else if ( a.IsLessThan(b) )
{
Console.WriteLine("a is less than b");
}
public static class StringExtensions
{
public static bool IsGreaterThan(this string i, string value)
{
return (i.CompareTo(value) > 0);
}
public static bool IsLessThan(this string i, string value)
{
return (i.CompareTo(value) < 0);
}
}
这好多了,但我仍然想定义 运算符。我发现一篇旧帖子解释了为什么这是不可能的:
目前不支持,因为扩展方法是在单独的静态类中定义的,静态类不能有运算符重载定义。
C# 中是否有任何更改现在允许为字符串类定义 运算符?
【问题讨论】:
-
没有。什么都没有改变,而且可能永远不会。我很高兴这是不可能的,因为人们会用它来做数学。
-
我很高兴我可以加载一个 DLL 并确保它不会改变我的字符串比较。
-
我宁愿使用(或实现自定义比较)
IComparer<String>。我们可以用许多不同的方式比较字符串:区分大小写和不区分大小写、自然和字典顺序;某些文化有特殊要求(例如在比较时用芬兰语W == V)等。不可能对所有情况实施一个“标准”<>比较
标签: c# string operator-keyword