首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在IEqualityComparer中包装委托

在 IEqualityComparer 中包装委托是一种在比较对象时应用自定义规则的方法。委托可以传递到 IEqualityComparer 的 Compare 方法中,以便定义对象之间要进行比较的规则。下面是一个使用 IEqualityComparer 包装委托的基本示例:

代码语言:csharp
复制
#region IEqualityComparer 使用示例
public static class ComparerHelper
{
    public static IEqualityComparer<T> Create<T>(Func<T, T, int> compare) => new CustomEqualityComparer<T>(compare);

    private class CustomEqualityComparer<T> : IEqualityComparer<T>
    {
        private readonly Func<T, T, int> _compare;

        public CustomEqualityComparer(Func<T, T, int> compare) => _compare = compare;

        public bool Equals(T x, T y) => _compare(x, y) == 0;

        public int GetHashCode(T obj) => obj.GetHashCode();
    }
}

class Program
{
    static void Main(string[] args)
    {
        int[] arr1 = { 1, 2, 3, 4 };
        int[] arr2 = { 10, 20, 30, 40 };

        Console.WriteLine("Without custom equality comparer:");
        Array.Sort(arr1, Array.Equals<int>(arr1, arr2, (a, b) => a.CompareTo(b)));
        Array.Sort(arr2, Array.Equals<int>(arr1, arr2, (a, b) => a.CompareTo(b)));

        Console.WriteLine("With custom equality comparer:");
        Array.Sort(arr1, new ComparerHelper.CustomEqualityComparer<(int x, int y)>((a, b) => a.Value.CompareTo(b)));
        Array.Sort(arr2, new ComparerHelper.CustomEqualityComparer<(int x, int y)>((a, b) => a.Value.CompareTo(b)));

        for (int i = 0; i < arr1.Length; i++)
        {
            for (int j = 0; j < arr2.Length; j++)
            {
                if(!arr1.Equals(arr2, new ComparerHelper.CustomEqualityComparer<(int x, int y)>((a, b) => a.Value.CompareTo(b)))))
                Console.WriteLine(i + "," + j + ": The elements are not equal!");
            }
        }

        Console.ReadLine();

    }
}
#endregion

在这个示例中,我们定义了一个create函数,它接受一个委托,并返回一个新的 CustomEqualityComparer<T> 实例。这里使用了 lambda 表达式 a => a.Value.CompareTo(b) 作为自定义比较规则。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 《重构》第七章 - 读后感(类的重构要点)

    上一章大概得学习了一下函数重构的手法,主要有9种。但是平心而论,有多少人还是随心所欲的写代码?所以我们做任何事情的时候还是得静下心来,把它当作一个艺术品去对待,才可能会有质的提升,而我们都提浮躁了。读完本书的第三章,我们可能都是飘飘然,似懂非懂。但是到了第六章之后就成了硬菜了。在读完之后,本人今天写代码突然发觉不知道如何写了,感觉代码中的问题很多,就第六章的函数提炼和函数内联以及变量内联。我们都没有做到,更别说返参和入参的复用了。感情整个代码都已经变成了垃圾,在写完一个方法之后,我感觉昨天的感悟修改了好几遍,才勉强觉得凑活。真心感慨以前怕是在假装写代码。确实越来越觉得读完这本书,会对一个开发人员思路和包结构设计都有很大的帮助。先不扯了,咋看一下本书的第七章:对象之间的搬移特性

    01
    领券