什么是更好的使用:字典<> .ForEach(pair =>)或字典<> .Keys.ForEach(key =>)?

StackOverflow https://stackoverflow.com/questions/1027389

如果我只能访问 Dictionary< TKey,TValue> 中的密钥,那么最好使用哪些密钥:

Dictionary<TKey, TValue>.ForEach(pair => action(pair.Key))

Dictionary<TKey, TValue>.Keys.ForEach(key => action(key))

哪种方法更“最佳实践”?我认为两种情况下的速度似乎非常相似。

有帮助吗?

解决方案

我认为这完全取决于您的用例。如果您只需要使用谓词中的键,我会使用第二个版本。否则,您将向lambda添加更多信息,而不是严格必要的信息。

但我不认为这里有一条硬性规则。可能只是更自然地流出键盘的任何东西。

同样,如果您需要同时使用键和值,请使用第一个键。

其他提示

我更喜欢使用

foreach (TKey key in dictionary.Keys)
{
    DoStuff(key);
}

如果我只需要键,因为它表达的意图比迭代键值对要好得多而且速度不慢 - 访问键是 O(1)

如果速度是你的目标,那么我建议你这样做:

foreach (TKey key in yourDictionary.Keys)
    action(key)

这不需要为 action 使用的任何方法创建委托。

请注意,这将是一个最小的性能优势,因为在您创建委托的情况下(如在两个示例中),编译器将从循环中提升委托的创建并仅创建一个委托实例。我仍然发现 foreach 比任何 ForEach 扩展方法更清晰,更容易阅读。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top