c# - 使用 lambda 表达式调用字典的键对象的方法

标签 c# linq lambda

如果我有类似的东西:

Dictionary<SomeObject, SomeOtherObject> _mydictionary 

SomeObject 有一个方法:SomeMethod()

如何使用 lambda 表达式调用方法 SomeMethod(),而不将键转换为列表并执行 ForEach。 ToList() 使它变得太昂贵。或者,用 lambda 等效于:

foreach(SomeObject o in _mydictionary.Keys)
  o.SomeMethod();

???

我尝试过:

_mydictionary.ToList().ForEach(x => x.SomeMethod());

但这对于 ToList(); 来说似乎太昂贵了;

最佳答案

使用Reactive Extensions (Rx) :

var keys = _mydictionary.Keys;
// convert the enumerable sequence of keys to an observable sequence
var observableKeys = keys.ToObservable ();
// invoke SomeMethod for each key
await observableKeys.ForEachAsync (obj =>
    obj.SomeMethod ());

此代码将在调用第一个 SomeMethod 之前执行,而不会阻塞枚举序列的调用,并且不会分配另一个集合。

不幸的是we're waiting for a new release交互式扩展 (Ix) 具有完全相同的功能,而无需从可枚举序列转换为可观察序列。

关于c# - 使用 lambda 表达式调用字典的键对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12064878/

相关文章:

c# - Linq 查询在为空时不返回 null

c++ - 如何转换C++11中忽略参数的函数?

lambda - 如何将 GraphQL 突变从一台服务器发送到另一台服务器?

c# - 如何处理与来自 .NET WPF 应用程序的具有 OCX 依赖项的 VB6 ActiveX dll 的对话

c# - 如何将值添加到数据表C#中的特定列和行的值

C# 我应该手动删除我声明的事件处理程序吗?

c# sizeof 十进制?

c# - LINQ 查询重用和延迟执行

c# - 如何使用 lambda 和非 lambda linq 有条件地排序?

c++ - 在本地定义的结构中模拟非本地(或自由)变量