【发布时间】:2014-09-24 14:05:41
【问题描述】:
我有一个名为 Folder 的类,看起来像
public class Folder
{
public int Id{get;set;}
public string Titel{get;set;}
public List<Folder> Folders{get;set;}
public List<Document> Documents{get;set;}
}
我每 10 秒从数据库中获取一个文件夹列表。现在我需要将新的文件夹列表与我已经在内存中的文件夹列表进行比较。
最好的方法是什么?
我的第一个方法是:
if(currentFolders.GetHashCode() != newFolders.GetHashCode())
{
// Work with changed data
}
另外,如果两个集合相同,我会得到不同的哈希码。
我的第二次尝试是将类标记为[Serializable] 并将两个列表序列化为Byte[]
byte[] b1, b2;
using (var m1 = new MemoryStream())
{
using (var m2 = new MemoryStream())
{
var binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(m1, newFolders);
b1 = m1.ToArray();
binaryFormatter.Serialize(m2, currentFolders);
b2 = m2.ToArray();
}
}
不幸的是Folder-class是通过Linq2SQL自动生成的,所以我不能轻易将其标记为Serializable
我还能做些什么来比较这两个集合?
【问题讨论】:
-
实现
IEquatable<T>或创建IEqualityComparer<T>,其中T是Folder