要创建一个不区分大小写的字符串类型,而该类型的行为与字符串完全相同,需要做什么?
我从来没有听说过任何人做出这样的不区分大小写的字符串类型,它显然不是框架的一部分,但它似乎非常有用。SQL默认情况下不区分大小写的比较就是一个很好的例子。所以我想这要么是不可能的,要么是有一个很好的理由为什么没有人这么做,而我却没有意识到。
我知道它需要使用隐式运算符进行赋值,并且您必须重写equals运算符。对于重写GetHashCode(),我认为您可以返回ToLower().GetHashCode()。
我错过了什么?
3条答案
按热度按时间nnsrf1az1#
比较字符串是相当容易的。您可以简单地使用equals方法或compare方法。
示例:
你也应该看看this。这将解释更多关于比较字符串的内容。
fslejnso2#
基于上面deathismyfriend的回答,我将扩展string类:
还有电话:
nwlls2ji3#
它的行为不会“* 完全像字符串 *”。
string
类型是特殊的,并被纳入语言规范。C#字符串表现出特殊的行为,例如a
、b
和c
都指向字符串quick
的同一个示例。这意味着Object.ReferenceEquals()
在比较任意两个时为真:[**编辑注意:**虽然有人可能认为这应该是可能的,但稍微摆弄一下表明,实际上不能创建
CompareInfo
的自定义实现/子类型,因为它没有公共构造函数,其默认构造函数是internal
。更多关于这个问题的答案:Globally set String.Compare/ CompareInfo.Compare to Ordinal嗯……
你可以做的是:
字符串比较使用当前区域性的排序规则/比较规则进行。为您的应用创建一个自定义区域性,比如说,使用您需要的排序规则/比较规则的美国区域性的副本。设置为当前文化和鲍勃的叔叔。
你仍然会得到编译器/ReSharper的抱怨,因为你在没有指定所需的比较语义的情况下进行字符串比较,但是你的代码将是干净的。
有关更多详细信息,请参见