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

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

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

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

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

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

返回值是真(相等)或者假(不等)。
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 )

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

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

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

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

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

微软官方的建议:

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

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

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

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

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

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 的 String 类型有三种比较方法:Equals、==、Compare。它们各有不同的用途和比较方式。 1. Equals 方法:用于比较两个字符串是否相等。它是一个实例方法,必须通过一个字符串对象来调用。 示例代码: ```csharp string str1 = "hello"; string str2 = "world"; bool isEqual = str1.Equals(str2); // false ``` 2. == 操作符:也用于比较两个字符串是否相等。它是一个运算符,可以直接对两个字符串进行比较。 示例代码: ```csharp string str1 = "hello"; string str2 = "world"; bool isEqual = str1 == str2; // false ``` 3. Compare 方法:用于比较两个字符串的大小关系。它返回一个整数值,表示两个字符串的大小关系。如果第一个字符串小于第二个字符串,则返回负数;如果两个字符串相等,则返回零;如果第一个字符串大于第二个字符串,则返回正数。 示例代码: ```csharp string str1 = "hello"; string str2 = "world"; int result = string.Compare(str1, str2); // -15 ``` 在选择使用这三种方法时,需要根据具体的场景来决定。 - 如果只是简单地比较两个字符串是否相等,可以使用 == 操作符或 Equals 方法。 - 如果需要比较两个字符串的大小关系,应该使用 Compare 方法。 - 如果需要在忽略大小写的情况下比较字符串,可以使用 Equals 方法的重载版本,并传递一个 StringComparison.OrdinalIgnoreCase 参数。 需要注意的是,== 操作符和 Equals 方法的比较方式略有不同。== 操作符比较的是字符串的值,而 Equals 方法比较的是字符串的内容。在某些情况下,两者的结果可能不同,因此需要根据具体情况进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值