如何在 C# 中使用反射检查集合类型属性的相等性
我有一个包含许多属性的类,其中一些是自定义类型的列表。 我需要比较此类的两个实例,并获取它们中不相等的属性列表。
我使用自定义属性(对于我想要包含在比较中的相关属性)并使用 IEquatable 来设计它,但是对于列表我遇到了问题。我本来打算使用 SequenceEqual
但它需要列表的类型 (IEnumerable
),我没有也不知道如何设置。我知道 GetElementType
< /a> 和 GetGenericArguments
方法,但我无法在 IEnumerable
中使用它们来使 SequenceEqual
工作。
我正在寻找适合此场景的最佳设计,以及如何实际执行此操作的代码示例。
I have a class with many properties, some of them are lists of custom types.
I need to compare two instances of this class, and get a list of properties that aren't equal in them.
I designed it with custom attributes (for the relevant properties that I want to include in the comparison), and using the IEquatable
, but for the lists I ran into problems. I was going to use SequenceEqual
but it requires the type of the list (IEnumerable<SomeType>
), which I don't have and don't know how to set. I'm aware of the GetElementType
and GetGenericArguments
methods but I can't use them inside IEnumerable<>
to make the SequenceEqual
work.
I'm looking for the best design for this scenario, and also code examples of how to actually do it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
此 Codeplex 项目使用反射对任意两个 .NET 对象执行深度比较:
http://comparenetobjects.codeplex.com/
项目描述
使用以下命令对任意两个 .NET 对象进行深度比较反射。显示两个对象之间的差异。
兼容性
与 .NET Framework 3.5 及更高版本兼容。 2.0 中的新增功能,可移植类库版本可与 .NET 4.0+、Silverlight 5+、Windows Phone 8+、Windows RT 8+、Xamarin iOS 和 Xamarin Droid
NuGet 包
配合使用。 org/packages/CompareNETObjects" rel="nofollow noreferrer">http://www.nuget.org/packages/CompareNETObjects
This Codeplex project performs a deep compare of any two .NET objects using reflection:
http://comparenetobjects.codeplex.com/
Project Description
Perform a deep compare of any two .NET objects using reflection. Shows the differences between the two objects.
Compatiblity
Compatible with .NET Framework 3.5 and higher. New in 2.0, portable Class Library version works with .NET 4.0+, Silverlight 5+, Windows Phone 8+, Windows RT 8+, Xamarin iOS, and Xamarin Droid
NuGet Package
http://www.nuget.org/packages/CompareNETObjects