所以我有一个名为alarm的结构,以及一个名为alarmList的警报列表。我经历一个循环,看看是否有新的警报。如果警报列表已经有,我说忽略它并继续:
Dim alarms() = G4TAPIs.G4TGetActivity(MyActRequest) 'get updated list of alarms
'this list may include all of the alarms previously.
For Each alarm In alarms
'if acknowledged, don't show
If alarm.AckedFlag = True And alarm.ResetFlag = True Then
Continue For
End If
If alarmList.Contains(alarm) Then
Continue For
End If
'do stuff to process
alarmList.add(alarm) 'add new alarm
Next
这个家伙经常打电话。警报()更新了所有过去的警报,包括我已经处理的警报,但它将时间更新为当前时间,尽管它们已经发生。所以我检查他们是否已经在我的列表中处理了包含。
是否有一种方法(也欢迎使用linq方法!)来编辑包含条件,以便在它不同时忽略一个功能?特别是alarm.when(日期类型变量)。它更新到当前日期,我想确保包含列表检查它们是否在所有实例中都相等但是.when。
最好的方法是什么?
答案 0 :(得分:2)
创建一个IEqualityComparer,忽略您不想检查的属性,并使用接受该值的重载Contains和IEqualityComparer。
抱歉 - 这是c#,而不是VB ......我很少写VB,如果我尝试过 - 那可能会非常难看。
class AlarmEqualityComparer : IEqualityComparer<Alarm>
{
public bool Equals(Alarm a1, Alarm a2)
{
// check whatever properties you want
}
public int GetHashCode(Alarm a1)
{
// build a hashcode using the properties that are checked
}
}
编辑...添加了VB翻译。
Class AlarmEqualityComparer
Implements IEqualityComparer(Of Alarm)
Public Function Equals(a1 As Alarm, a2 As Alarm) As Boolean
' Check whatever properties you want
End Function
Public Function GetHashCode(a1 As Alarm) As Integer
' Build a hashcode using the properties that are checked
End Function
End Class