Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 哪种方式比较对象更好/更合适?_C#_Compare - Fatal编程技术网

C# 哪种方式比较对象更好/更合适?

C# 哪种方式比较对象更好/更合适?,c#,compare,C#,Compare,我正在使用specflow编写测试REST服务的测试。测试的主题是检查我从服务获取的列表是否包含正确的对象 我在后台部分有样本数据,每次运行时都会将其放入数据库中,每次运行后都会将其清除。关键是我知道数据库中的确切数据,应该将对象与DTO类进行比较 在我的测试中,我必须比较请求调用反序列化JSON字符串以列出REST服务url的结果和测试数据填充列表。所以,我有两个清单。问题是哪种方法比较它们更好 A、 我编写了一个通用的comparator类,我不希望测试库和应用程序之间存在依赖关系,步骤如下

我正在使用specflow编写测试REST服务的测试。测试的主题是检查我从服务获取的列表是否包含正确的对象

我在后台部分有样本数据,每次运行时都会将其放入数据库中,每次运行后都会将其清除。关键是我知道数据库中的确切数据,应该将对象与DTO类进行比较

在我的测试中,我必须比较请求调用反序列化JSON字符串以列出REST服务url的结果和测试数据填充列表。所以,我有两个清单。问题是哪种方法比较它们更好

A、 我编写了一个通用的comparator类,我不希望测试库和应用程序之间存在依赖关系,步骤如下

传递方法名称,例如合作伙伴名称 从任一列表中获取一个项,并调用该方法以获得具体数据,从而在另一个对象列表中找到相同的对象 让具体的数据循环通过另一个集合,对列表中的每个对象调用给定的方法,并比较我在上一步中得到的结果 如果找到所需的类,则使用equals方法比较它们 B,

从任一列表中选取一项 循环浏览另一个列表,并使用equals方法将每个项目与我在上一步中得到的项目进行比较 目前我有两个办法。我已经读了一些关于比较的文章,我不想让它变得比需要的更复杂。我的意思是,实现IComparable接口,覆盖GetHashCode方法。另一方面,我不确定如果DTO类为了测试而实现接口是否好

也许我读得不够多,或者我离问题太近了。我想问你的是,回顾一下我的两种可能的方法——我绝对不确定它们是否正确——如果你知道一篇关于这个问题的文章,请与我分享。我不需要现有的解决方案——无脑地使用他人的代码不是我的方式——我需要去哪里的提示

文章:

MSDN材料
提前谢谢你的帮助

要比较对象本身,应覆盖Equals方法。 如果在某个时间点您的对象可能被用作字典中的键或类似的东西,那么也要覆盖GetHashCode

然后可以使用Enumerable.SequenceEqual检查两个列表是否相等。
您也可以创建一个IEqualityComparer并将其传递给SequenceEqual调用,而不是在对象上实现Equals,但我认为实现Equals是更通用的方法。

谢谢您的帮助!我的DTO对象正在实现接口,我覆盖了Equals方法。这样,我就可以使用。我必须说,它太完美了!