如何在 C# 中使用反射检查集合类型属性的相等性

发布于 2024-10-27 16:22:21 字数 718 浏览 1 评论 0原文

我有一个包含许多属性的类,其中一些是自定义类型的列表。 我需要比较此类的两个实例,并获取它们中不相等的属性列表。

我使用自定义属性(对于我想要包含在比较中的相关属性)并使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

北渚 2024-11-03 16:22:21

此 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文