我有一个这样的课程
public class HistoryEntry
{
DateTime Date{ get; protected set; }
HistoryType EntryType { get; protected set; }
}
public enum HistoryType
{
Cancelled,
Cleared,
Redeemed,
Refunded
}
我有一个这些历史记录条目的无序列表,我确实存在语句,以查看列表中是否存在条目。
return Entries.Exists(e => e.EntryType == HistoryEntryType.Cancelled);
现在我需要更改此方法,以便此方法返回最后清除条目的TimeStamp后是否存在已取消条目(如果存在),否则只返回是否存在已取消条目
我仅限于.Net 2.0中提供的选项
答案 0 :(得分:1)
这样的事情怎么样:
private bool ContainsCanceled(List<HistoryEntry> list)
{
list.Sort();
int index = list.FindLastIndex(delegate(HistoryEntry h) { return h.HistoryType == HistoryType.Cleared; });
for (int i = index >= 0? index : 0; i < list.Count; i++)
{
if (list[i].HistoryType == HistoryType.Cancelled)
{
return true;
}
}
return list.Exists(delegate(HistoryEntry h) { return h.HistoryType == HistoryType.Cancelled; });
}
我正在使用C#2.0语法...
哦,还有一件事,请确保您的HistoryEntry类实现了IComparable:
public class HistoryEntry : IComparable<HistoryEntry>
{
public DateTime Date { get; set; }
public HistoryType HistoryType { get; set; }
public int CompareTo(HistoryEntry other)
{
return this.Date.CompareTo(other.Date);
}
}
答案 1 :(得分:0)
搜索列表中匹配条目的索引,这需要进行两次搜索。
int p = Entries.FindIndex(e => e.EntryType == HistoryEntryType.Cleared);
if (p < 0)
p = 0;
p = Entries.FindIndex(p, e => e.EntryType == HistoryEntryType.Cancelled);
return (p >= 0);