首页 > 分享 > c#中字符串比较,==,!=,Compare,Equals的区别

c#中字符串比较,==,!=,Compare,Equals的区别

我在比较字符串时,都是使用 == 和 != 运算符,但今天发现c#关于字符串比较功能很多。
除了以上的,还有Compare,Equals。
有什么区别?

首先说== 和 !=,它比较的是字符串的值。
本质上是对Equals方法一部分的重载,微软封装好的,在内部他已经对 = = 操作符进行了重写。

string a="abc"; string b="abcd" 12

为什么说是对Equals方法一部分的重写?
因为Equals也是挺复杂的,它的完整型:

string.Equals(string a,string b, System.StringComparison) 1

返回值是真(相等)或者假(不等)。
System.StringComparison 是一个枚举类型,指定比较的敏感区域性,要不要区分大小写,要不要使用序号排序规则。

CurrentCulture----- 使用区域敏感排序规则和当前区域比较字符串。

CurrentCultureIgnoreCase -----使用区域敏感排序规则、当前区域来比较字符串,同时忽略被比较字符串的大小写。

InvariantCulture -----使用区域敏感排序规则和固定区域比较字符串。

InvariantCultureIgnoreCase -----使用区域敏感排序规则、固定区域来比较字符串,同时忽略被比较字符串的大小写。

Ordinal----- 使用序号排序规则比较字符串,区分大小写。

OrdinalIgnoreCase -----使用序号排序规则并忽略被比较字符串的大小写,对字符串进行比较。

什么又是区域敏感性?
解释:计算机不同的区域设置,会影响字符串比较的结果,对于我们的中国区域设置:
null<零长度字符串<0<1<2<…<9<a<b<c<…<z<…<阿<…<不<…<吃
换成其他的区域,string.Equals的结果就可能会发生变化。

什么又是序号规则?
解释:需要对两个字符串的值进行比较和排序而不需要考虑语言惯例时。

所以很明显了,==和!= 事实上重载的是Ordinal,区分大小写。

string.Equals(string a,string b,Ordinal ) 1

string.compare和string.Equals的区别又在哪里?
string.compare的完整型与string.Equals极其类似:

string.Compare(string a,string b,System.StringComparison ) 1

返回值<0,等于0,大于0.
字符串 “200” 是小于 “30” 的,因为 “2” 小于 “3”.
可以说,string.Equals属于string.Compare等于0的一部分,重载的是:

if(string.Compare(string a,string b, Ordinal)==0) 1 总结:

string.Compare 最完善复杂,不光可以比较是否相等,还能排序。
string.Equals 是string.Compare的子集, 序号规则,相等条件时的简写。
==和!=是string.Equals的子集, 序号规则, 区分大小写时的简写。

微软官方的建议:

在比较字符串时,您使用的方法应该显式指定了要执行的比较类型。

尤其是代码需要考虑国际化的时候。

这可增强代码的可维护性和可读性,避免让程序员产生歧义,到底是想比较序号?还是想比较固定区域?

应尽可能使用具有 StringComparison 枚举参数的 System.String 和 System.Array 类的方法重载,以便可以指定要执行的比较类型。

比较字符串时,最好避免使用 == 和 != 运算符。

相关知识

Java 中 == 和 equals() 区别
建议11: 区别对待==和Equals
“==”和“equals”有的时候和你想象的不一样
关于null != a 与 a != null 的区别
一、字符串的最大公因子(Weekly Contest 138)
Java学习笔记——Object类、多态、final
==的作用
C# 中的日志记录技术详细解析与示例
基于C#制作一个桌面宠物代码
获取一个字符串在另一个字符串中出现的次数。 比如:获取sub= “AB“”在 “str = “ABACBABAABAC“ 中出现的次数。

网址: c#中字符串比较,==,!=,Compare,Equals的区别 https://m.mcbbbk.com/newsview759407.html

所属分类:萌宠日常
上一篇: 设有一个线性表E = { e1,
下一篇: 小型宠物狗价格大概在多少钱