C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c# – 如何通过以下代码调用Equals,GetHashCode和Compare? (神秘)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
代码有效,但如何实际调用任何列出的方法.它的工作原理,但似乎它几乎是神奇的,为什么它的工作原理.我从来没有实际调用Equals,GetHashCode或Compare,但代码有效.我也从不在构造函数中为实现两个接口的EmployeeComparer类调用任何东西.

问题:当这个类与新的KeyWord实现时,这是否自动完成? (有些事情似乎不对劲)

@H_403_13@public class EmployeeComparer : IEqualityComparer<Employee>,IComparer<Employee>

EmployeeComparer:

@H_403_13@public bool Equals(Employee x,Employee y) { return String.Equals(x.Name,y.Name); } public int GetHashCode(Employee obj) { return obj.Name.GetHashCode(); } public int Compare(Employee x,Employee y) { return String.Compare(x.Name,y.Name); }

类:

@H_403_13@using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { public delegate void Del(string e); Del handler = DelegateMethod; Dictionary<string,List<Employee>> d = new Dictionary<string,List<Employee>>(); public static void DelegateMethod(string message) { System.Console.WriteLine(message); System.Console.ReadKey(); } public void testDel(Del d) { d.Invoke("L"); } static void Main(string[] args) { Program p = new Program(); //p.handler("Hello World"); //p.handler("DisneyLand"); //p.handler("Cattle Wars"); //p.testDel(p.handler); var d = new SortedDictionary<string,SortedSet<Employee>>(); //Hashset no duplicates d.Add("AA",new SortedSet<Employee>(new EmployeeComparer())); d["AA"].Add(new Employee { Name = "A" }); d["AA"].Add(new Employee { Name = "B"} ); d["AA"].Add(new Employee { Name = "C"} ); d["AA"].Add(new Employee { Name = "C" }); d["AA"].Add(new Employee { Name = "C" }); d.Add("BB",new SortedSet<Employee>(new EmployeeComparer())); d["BB"].Add(new Employee { Name = "E"} ); d["BB"].Add(new Employee { Name = "F"} ); d["BB"].Add(new Employee { Name = "A"} ); d.Add("CC",new SortedSet<Employee>(new EmployeeComparer())); d["CC"].Add(new Employee { Name = "Z"} ); d["CC"].Add(new Employee { Name = "X"} ); d["CC"].Add(new Employee { Name = "Y"} ); d.Add("DD",new SortedSet<Employee>(new EmployeeComparer())); d["DD"].Add(new Employee { Name = "Z" }); d["DD"].Add(new Employee { Name = "U" }); d["DD"].Add(new Employee { Name = "U" }); d["DD"].Add(new Employee { Name = "Q" }); d["DD"].Add(new Employee { Name = "Y" }); foreach (var a in d) { Console.WriteLine(a.Key); foreach (var e in a.Value) { Console.WriteLine("\t" + e.Name); } } Console.ReadKey(); } } public class EmployeeComparer : IEqualityComparer<Employee>,IComparer<Employee> { public EmployeeComparer() { } public bool Equals(Employee x,y.Name); } } }

解决方法

这根本不是魔术. SortedSet<T>的实现调用Compare(在您的示例中,没有调用GetHashCode或Equals).就像你执行以下操作一样:

@H_403_13@void Main() { MyMethod(new EmployeeComparer()); } void MyMethod(IComparer<Employee> comparer) { var emp1 = new Employee { Name = "George" }; var emp2 = new Employee { Name = "Tom" }; Console.WriteLine(comparer.Compare(emp1,emp2)); }

从Main的角度来看,它从未调用过Compare,它只做了一个新的.它调用方法是做Compare的方法.

大佬总结

以上是大佬教程为你收集整理的c# – 如何通过以下代码调用Equals,GetHashCode和Compare? (神秘)全部内容,希望文章能够帮你解决c# – 如何通过以下代码调用Equals,GetHashCode和Compare? (神秘)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: