【发布时间】:2018-06-11 17:39:07
【问题描述】:
我有两个 DateTime 列表,并且可以毫无问题地将它们相交:
IEnumerable<DateTime> both = list1.Intersect(list2);
我有自定义数据类型,仍然需要找到交集:
public class AssetRecord
{
// Custom data type. Each object has time and price
public DateTime AssetDate { get; set; }
public double AssetPrice { get; set; }
}
// Lits initialization
public static List<AssetRecord> list1 = new List<AssetRecord> { };
// Key/Values - Date/Price. Custom data type is used to store an object in the collection
public static List<AssetRecord> list2 = new List<AssetRecord> { };
问题在于 IEnumerable 仅将 DataTime 列表作为输入,而我不再拥有该数据类型。是否可以使用自定义类型找到交集?或者是否可以仅从创建的数据类型中获取 Date 字段并将其转换为 List 然后将其传递给 IEnumerable?
【问题讨论】:
-
重写assetrecord函数的equals方法来检查里面的两个字段是否匹配...应该可以工作
-
你需要为你的类型定义相等性(docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…),或者在
Enumerable.Intersect的重载中使用自定义IEqualityComparer<AssetRecord>,它需要两个参数(msdn.microsoft.com/en-us/library/bb355408(v=vs.110).aspx)。 -
... 或实现 IEqualityComparer
并使用 Intersect 的重载 -
@DiegoSlinger 阅读文档。它有据可查,网络上有无数示例
-
Intersect在您使用的重载中调用Equals本身,您只需要实现它。如果你不想想在你的类型上定义相等,你需要实现一个IEqualityComparer并将它的一个实例传递给Intersect。
标签: c#