首页 / 知识
C#中字符串比较方法的差异
2023-04-14 05:40:00

Differences in string compare methods in C#比较C中的字符串非常简单。事实上,有几种方法可以做到这一点。我在下面列出了一些。我好奇的是它们之间的区别,以及何时应该使用一个而不是另一个?应该不惜一切代价避免一个吗?还有更多我没有列出的吗?
(注:在本例中,我希望平等,不小于或大于,但也可以对此发表评论) 以下是这些函数如何工作的规则: 只需检查引用是否相同,即,它不仅仅是两个内容相同的字符串,而是将字符串对象与自身进行比较。 请注意,对于上面使用方法调用的选项,有一些重载具有更多的选项来指定如何进行比较。 我的建议是,如果你只是想检查是否平等,那就决定你是否要使用依赖于文化的比较,然后根据选择使用 来自MSDN:
他们建议在寻求平等时使用 如果你对BCL方法的不同很好奇,Reflector就是你的朋友。 我遵循以下准则: 完全匹配:edit:I previously always used==operator on the principle that inside equals(string,string)the object==operator is used to compare the object references but it sight stra.equals(strb)is still 1-11%faster overall than string.equals(stra,strb),stra==strb,and string.compareordinal(stra,strb).我用秒表对两个实习/非实习字符串值进行了循环测试,字符串长度相同/不同,大小不同(1b到5Mb)。
人类可读匹配(西方文化,不区分大小写):
人类可读匹配(所有其他文化,不敏感的大小写/重音/假名/等由CultureInfo定义):
与自定义规则(所有其他文化)的人类可读匹配:
如Ed所说,compareto用于排序。 然而,在.equals和==之间有区别。 ==基本上解析为以下代码:
原因很简单,如下将引发异常:
以下内容将不会:
有关字符串比较问题的良好解释和实践可以在文章《在Microsoft.NET 2.0中使用字符串的新建议》和《在.NET框架中使用字符串的最佳实践》中找到。 上述每种方法(和其他方法)都有特定的用途。它们之间的关键区别在于默认情况下它们使用的是哪种StringComparison枚举。有几种选择:
以上每种比较类型都针对不同的用例:
注意,StringComparison枚举和字符串比较方法的重载自.NET 2.0以来就存在。 string.compareto方法(string)实际上是IComparable.CompareTo方法的类型安全实现。默认解释:当前区域性。 用途:
因此
String.Compare方法 具有多个重载的字符串类的静态成员。默认解释:当前区域性。
String.Equals方法 从对象类重写并为类型安全而重载。默认解释:序数。注意:
StringComparer类 还有另一种处理字符串比较的方法,特别是针对排序:
通常情况下,99%的用户需要这样做,但如果你必须在一个循环中这样做数百万次,我强烈建议你使用.equals或==因为一旦它发现一个不匹配的字符,它就会将整个事件抛出为false,但如果你使用compareTo,它必须找出字符小于另一个字符,导致性能时间稍差。 如果您的应用程序将在不同的国家/地区运行,我建议您查看文化信息的含义,并可能使用.equals。因为我只为美国编写应用程序(不在乎别人是否能正常工作),所以我总是使用==。 在这里列出的表格中,两者没有太大的区别。 如果考虑重载,那么情况会有所不同。 由于它的多功能性,我发现我使用 需要注意的一个大区别是,如果第一个字符串为空,则.equals()将引发异常,而==将不会。
使用.equals也很容易阅读。 使用.equals,还可以获得StringComparison选项。很容易忽视案件和其他事情。 顺便说一句,这个值将为假
因为==比较a和b(指针)的值,所以只有当指针指向内存中的同一对象时,才会计算为true。.equals取消对指针的引用并比较存储在指针上的值。这里a等于b。 如果将b改为:
那么a.equals(b)是假的,但是
将是真的 a.compareto(b)调用字符串的compareto函数,该函数比较指针处的值,如果a处存储的值小于b处存储的值,则返回<0;如果a.equals(b)为真,则返回0;否则返回>0。但是,这是区分大小写的,我认为比较对象可能有忽略大小写之类的选项,但现在没有时间查看。正如其他人已经说过的,这将用于排序。以这种方式比较相等会导致不必要的开销。 我肯定我会把东西忘了,但我认为如果你需要更多的细节,这应该是足够的信息来开始试验。 |
最新内容
相关内容
linux命令查的是啥?
linux命令查的是啥?,系统,时间,信息,状态,命令,工具,名称,标准,软件,情况,Linux系统中用于查看系统进程状态的命令是什么?命令是[ps-aux]。该命令linux命令查找字符串?
linux命令查找字符串?,工具,信息,命令,字符串,系统,工作,文件,范本,样式,文本,Linux中使用grep命令,查询多个字符串Linux grep命令用于查找文linux命令输入方法?
linux命令输入方法?,系统,电脑,密码,管理,地址,命令,网站,工具,首开,位置,linux终端输入~怎么弄中间在电脑上打开需要的Word文件进入。进入到文linux命令字符串匹配?
linux命令字符串匹配?,系统,工具,命令,字符串,灵活,状态,文件,文本,模式,管道,图文说明Linux下grep查找含有某字符串的方法在linux中grep命令Python中什么是反射?使用方法有哪
Python中什么是反射?使用方法有哪些?,信息,培训,状态,术语,检测,反射,属性,对象,字符串,方法,反射这个术语在很多语言中都存在,并且存在大量的python字符串截取?
python字符串截取?,代码,步长,位置,分析,字符串,字符,信息,灵活,数字,表示,在Python中,字符串是一种非常常见的数据类型,它可以用来表示文本、数Python中有哪些方法可以解压文件?
Python中有哪些方法可以解压文件?,工具,系统,工作,培训,文件,文件夹,方法,窗体,不同于,以下内容,在Python学习和日常使用中,很容易造成文件过大Python列表类型list合并有哪些方法
Python列表类型list合并有哪些方法?,培训,方法,列表,可能会,数组,切片,下文,字符串,数据类型,请看,在Python编程语言中,有各种数据类型,比如字符零基础学习Python的四种方法
零基础学习Python的四种方法,基础,代码,基础知识,培训,发展,时间,知识,书籍,初学者,练习,近年来,随着移动互联网的发展,对Python人才的需求越来如何在Python中定义类方法和修改类
如何在Python中定义类方法和修改类属性?,代码,方法,培训,对象,实例,定义,结果,示例,赋值,属性,Python中的类还可定义使用@classmethod修饰的类提高Python 效率的 5 种高级方法
提高Python 效率的 5 种高级方法,代码,数字,函数,有限,设备,项目,工具,培训,列表,内存,任何编程语言的高级特征通常都是通过大量的使用经验才关于Python的高效学习方法
关于Python的高效学习方法,基础,培训,资料,质量,技术,系统,情况,学习方法,高效,初学者,今天给大家分享一下Python高效的学习方法,尽管每个人的