【发布时间】:2010-10-13 06:45:37
【问题描述】:
我在带有 .NET 3.5 的 Visual Studio 2008 中使用 C#。
我有一个通用字典,可以将事件类型映射到通用订阅者列表。一个订阅者可以订阅多个事件。
private static Dictionary<EventType, List<ISubscriber>> _subscriptions;
要从订阅列表中删除订阅者,我可以使用这两个选项之一。
选项 1:
ISubscriber subscriber; // defined elsewhere
foreach (EventType event in _subscriptions.Keys) {
if (_subscriptions[event].Contains(subscriber)) {
_subscriptions[event].Remove(subscriber);
}
}
选项 2:
ISubscriber subscriber; // defined elsewhere
foreach (EventType event in _subscriptions.Keys) {
_subscriptions[event].Remove(subscriber);
}
我有两个问题。
首先,请注意选项 1 在删除项目之前检查是否存在,而选项 2 使用暴力删除,因为 Remove() 不会引发异常。在这两种方法中,哪一种是首选的“最佳实践”方法?
其次,是否有另一种“更简洁”的更优雅的方式来执行此操作,可能使用 lambda 表达式或使用 LINQ 扩展?我还在适应这两个功能。
谢谢。
编辑
澄清一下,我意识到选项 1 和 2 之间的选择是速度(选项 2)与可维护性(选项 1)的选择。在这种特殊情况下,我不一定要尝试优化代码,尽管这当然是值得考虑的。我想了解的是,是否有一个普遍成熟的做法来做到这一点。如果不是,您会在自己的代码中使用哪个选项?
【问题讨论】: