C#中Equals和GetHashCode
2021-01-15 02:10
标签:readline nts code console rabl 数据 值类型 通过 lex Equals每个实现都必须遵循以下约定: GetHashCode: 下面我们创建一个学生类,从而进一步的实现我们对象数据的对比 通过如下代码我们将通过distinct方法实现我们的过滤. 我们需要达到的是忽略相同数据的对象,但是并没有达到我们如期的效果.因为是distinct默认比较的是对象的引用...所以这样达不到我们预期效果.那我们修改一下来实现我们预期效果. 在默认情况下Equals具有以下行为: Distinct 通过使用指定的 IEqualityComparer TSource source 的元素类型。 comparer IEqualityComparer 我们来看如下代码片段 上述代码片段如果两个Equals返回的true并且GetHashCode返回相同的哈希码,则认为两个对象相等. 上述代码片段执行后结果非预期效果.我们将进一步的去实现代码,以达到预期效果.... 我们再使用LINQ Distinct方法进行过滤和查询,同时将会检查Equals和GetHashCode C#中Equals和GetHashCode 标签:readline nts code console rabl 数据 值类型 通过 lex 原文地址:https://www.cnblogs.com/yyfh/p/12245916.html
Equals和GetHashCode
IEqualityComparer实现
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
List
类型参数
参数
返回
一个包含源序列中的非重复元素的 IEnumerable public class StudentComparator : EqualityComparer
重写Equals和GetHashCode
var stu1 = new Student { Name = "MR.A", Age = 32 };
var stu2 = new Student { Name = "MR.A", Age = 32 };
bool result = stu1.Equals(stu2); //false because it's reference Equals
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public override bool Equals(object obj)
{
var stu = obj as Student;
if (stu == null) return false;
return Name == stu.Name && Age == stu.Age;
}
public override int GetHashCode()
{
return Name.GetHashCode() * Age;
}
}
var stu1 = new Student { Name = "MR.A", Age = 32 };
var stu2 = new Student { Name = "MR.A", Age = 32 };
bool result = stu1.Equals(stu2); //result is true
List
下一篇:C#项目间复用窗体
文章标题:C#中Equals和GetHashCode
文章链接:http://soscw.com/index.php/essay/42041.html