C# EqualityComparer

C#中的EqualityComparer是一个泛型类,用于比较两个对象的相等性。它实现了IEqualityComparer接口,该接口定义了两个对象相等的条件。EqualityComparer提供了两种实现方式:

  1. 通过默认比较器进行比较,使用EqualityComparer.Default静态属性获取默认比较器。当T是引用类型时,它使用Object.Equals方法比较两个对象的相等性。当T是值类型时,它使用EqualityComparer.Default比较相等性。
  2. 自定义比较器,继承EqualityComparer类,重写Equals和GetHashCode方法,实现自定义比较逻辑。

以下是使用EqualityComparer进行字符串比较的示例:

string str1 = "Hello";
string str2 = "hello";
bool areEqual = EqualityComparer<string>.Default.Equals(str1, str2);
Console.WriteLine(areEqual); // false,因为默认比较器区分大小写

// 自定义比较器
public class CaseInsensitiveComparer : EqualityComparer<string>
{
    public override bool Equals(string x, string y)
    {
        return x.Equals(y, StringComparison.OrdinalIgnoreCase);
    }

    public override int GetHashCode(string obj)
    {
        return obj.ToUpper().GetHashCode();
    }
}

string str3 = "HELLO";
bool areEqual2 = new CaseInsensitiveComparer().Equals(str1, str3);
Console.WriteLine(areEqual2); // true,因为自定义比较器不区分大小写

上面的例子中,首先使用EqualityComparer.Default比较器进行比较,由于默认比较器区分大小写,因此返回false。然后定义了一个自定义比较器CaseInsensitiveComparer,重写了Equals和GetHashCode方法实现了不区分大小写的比较逻辑,再次进行比较,返回true。

StringComparison.OrdinalIgnoreCase

StringComparison.OrdinalIgnoreCase 是一个枚举类型,用于比较字符串时指定字符串的比较规则。它表示字符串的比较应该忽略大小写,例如 “apple” 和 “APPLE” 将被认为是相等的。

具体来说,OrdinalIgnoreCase 是比较规则的一个选项,其中 Ordinal 表示比较的是字符串的顺序,IgnoreCase 表示比较时忽略大小写。因此,使用 OrdinalIgnoreCase 比较字符串时,它们的字母顺序和大小写将被忽略,只有它们的字符序列相同才会被认为是相等的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周杰伦fans

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值