![]() |
1
7
最好的方法是首先创建一个包含
或者,您可以使用反射,或者如果您使用C#4.0,您可以使用
或者(2):当您希望“正确”地执行此操作并且希望使用LINQ之类的标准机制比较列表时,应该实现IComparable。您可以将其与泛型结合起来创建类型安全性。
还有很多其他的方法。上面最后一种方法的优点是只需为
|
![]() |
2
4
我很难理解这个问题。但我把它读作“如何根据T1值找出这两个对象列表之间的差异”,然而,就像我说的,这是一个关于实际问题的完全猜测。 在这里使用linq对您来说是一个很好的开始:
我只给读者留一个练习。
|
![]() |
3
3
如果你想要一个可重复使用的答案,而不是特定于
编辑:我似乎得到了不熟悉反射的人的反对票,所以我将添加一些示例源代码:
EDIT:分离的反射代码,因此可以通过传入lambda来避免。
编辑:使用
EDIT:缓存属性getter委托以避免为每个列表(仅为每个列表类型)支付反射开销。
注意:这个答案的复杂性很大程度上涉及到指定属性中的条目不唯一的可能性。我返回匹配项的笛卡尔积,但不计算两个完整列表的笛卡尔积。如果假设键属性的唯一性,事情可以简化很多。 |
![]() |
4
2
|
![]() |
5
2
我的第二个答案,作为一个新的答案,因为它是相当不同于我以前的答案,都有自己的价值
我假设,对于下面的代码,更改类不是一个选项。我也遵循OP的要求使用泛型。代码是初步的,但应该与小的增强工作。代码已经过测试并运行正常。 要解决的问题不是泛型,而是反射,简单地说,对于这个场景来说,反射太慢了,这就是为什么我在第二个代码块中向您展示如何应用代理的手动缓存以及如何找到gettor的方法。
下面是实际代码。我评论了更难的部分。它不是您将遇到的最简单的代码类型,要理解或应用它,您需要了解反射、委托和方法调用技术。
|
![]() |
Glory Raj · 有什么方法可以使这两个块具有共同的功能吗 2 年前 |
![]() |
milczi · Swift通用无强制展开向下投射 6 年前 |
![]() |
bugs · Typescript-泛型类型扩展自身 6 年前 |
![]() |
John Bustos · C#通用工厂模式,不说明通用工厂模式的类型 6 年前 |
![]() |
Blankdud · 具有默认数据的通用对象创建方法 6 年前 |
![]() |
Tim Hutchison · 从泛型对象列表中读取泛型值 6 年前 |