2013-05-11 73 views
2

我有我的序列化和反序列化的自定义类的哈希集,我如何删除比说1天更旧的类的旧实例?Hashset删除旧实例

+3

你有自定义类中的任何序列时间戳或任何财产可用于识别创建日期。 – Saravanan 2013-05-11 13:29:31

+0

在反序列化期间,如果无法正确反序列化,它应该抛出异常。难道你不能把它包裹在试试看吗? – cgatian 2013-05-11 13:31:35

回答

1

您可以使用HashSet.RemoveWhere

DateTime now = DateTime.Now; 
hashSet1.RemoveWhere(obj => (now - obj.DateTimeProperty).TotalDays >= 1); 

(假设DateTimeProperty是在类中DateTime属性)

有没有一种方法,我可以遍历所有已删除对象之前,我 删除?

@ user2372936:那么我会过滤掉你首先删除对象,循环它们,并使用HashSet.Remove(obj)将其删除:

var toDelete = hashSet1.Where(obj => (now - obj.DateTimeProperty).TotalDays >= 1); 
foreach(var obj in toDelete){ 
    //...; 
    hashSet1.Remove(obj); 
} 
+0

太酷了!有没有一种方法可以在删除它们之前遍历所有已删除的对象? – user2372936 2013-05-11 15:11:59

+0

@ user2372936:然后,我会筛选你将首先删除的对象,循环它们并使用['HashSet.Remove(obj)'](http://msdn.microsoft.com/zh-cn/library/bb342694。 aspx)删除它们:var toDelete = hashSet1.Where(sameConditionAsAbove); foreach(var obj in toDelete){// ...; hashSet1.Remove(obj);}'。相应地编辑我的答案。 – 2013-05-11 15:18:35