C#中包含子类集合的类的Equals方法重写
来源:互联网 发布:可以照一寸照的软件 编辑:程序博客网 时间:2024/06/05 22:51
最近的项目中,对于单元测试,我们使用NMock来模拟测试方法中依赖的方法的行为。我们在定义模拟方法的参数值和返回值时遇到了问题。当参数或返回值为一个对象时,我们必须重写它的Equals方法来使模拟值与实际的值匹配。
因此我会为每个实体类重写Equals和GetHashCode方法。
我们有这样一个类:
public class ShippingRequest{ IEnumerable<string> ResourceIds; string Receiver; string Comment;}
它的Equals方法中会对ResourceIds、Receiver和Comment的值作比较,如果全部相同则返回true。
ResourceIds实际上是我们需要邮寄的一组设备的Id号,因此我们并不在意它们的顺序,只要两个对象中包含了一组同样的Id号即可确定它们的ResourceIds是相等的。
怎么对集合类型的ResourceIds作比较呢?
自然我们可以对集合中的元素做一一比较查看两组集合中是不是包含了相同的元素。
但是如果使用LINQ,我们可以用非常简单的方式。
list2.Except(list1);//返回在list2中但不在list1中的元素因此我们可以将ShippingRequest类的Equals方法写成这样:
public override bool Equals(object o){ if (o == null || !this.GetType().Equals(o.GetType())) { return false; } if(this == o) { return true; } var shippingRequest = o as ShippingRequest ; if(this.ResourceIds.Except(shippingRequest.ResourceIds).Count()==0 && shippingRequest.ResourceIds.Except(this.ResourceIds).Count()==0 && this.Receiver.Equals(shippingRequest .Receiver) && this.Comment.Equals(shippingRequest .Comment)) { return true; } return false;}
然后我们只需重写ShippingRequest类的GetHashCode方法就完成了整个类。
这里所说的集合类型可以是IEnumerable,或者实现它的任意集合类。而集合中的类型也可以是任意类型,当然如果是自定义的类,我们首先需要正确的重写该自定义类的Equals方法。
- C#中包含子类集合的类的Equals方法重写
- 重写类的equals方法
- C# Equals的重写
- C#中子类重写父类方法的几种情况(virtual,abstract,override,new)
- equals()方法的重写
- equals方法的重写
- equals()方法的重写
- equals方法的重写
- equals()方法的重写
- equals()方法的重写
- equals方法的重写
- equals()方法的重写
- equals()方法的重写
- Java__子类中调用父类重写的方法。
- Java中子类重写父类方法的思想本质!
- 面向对象 子类中 < 重载 重写 >父类的方法
- java 中 重写equals方法的用处
- Java中重写equals方法的注意事项
- 【基础C&C++】fork和vfork
- AS3多线程快速入门(一):Hello World[
- C# 操作Excel获取数据、时间、图片
- AjaxPro使用方法详解
- 部署Tomcat的几种方法
- C#中包含子类集合的类的Equals方法重写
- js时间格式转换
- VMware-workstation-full-8.0.4-744019
- 信任--谈谈企业成功中的人力因素
- One-line Tips Recently Summarized
- read web.config value-
- 获取免费Windows Store开发者账户方法
- Native API提权函数RtlAdjustPrivilege
- css多列等高-利用padding-bottom|margin-bottom正负值相抵