用于 LINQ 静态方法的 C++/CLI Lambda 选择器

标签 c++ linq visual-studio-2012 lambda c++-cli

我在 C++/CLI (Visual Studio 2012) 中有这个

Enumerable::Max((IEnumerable<IFoo^>^) Foos, [](IFoo^ f){return f->Id;});

但它会导致这个错误:

No instance of overloaded function "System::Linq::Enumerable::Max" matches argument list

这让我很生气,因为 lambda 没有任何问题。我需要以某种方式将它转换为 Func 吗?

最佳答案

C++/CLI 编译器不支持 C++11 lambda 表达式,它们不能转换为委托(delegate)对象。尽管 .NET 有很大的领先优势,但从未添加对托管 lambda 的支持,而且肯定永远不会添加。

您需要一个带有返回 IFoo->id 的辅助函数的委托(delegate)对象,可能如下所示:

int returnId(IFoo^ obj) { return obj->Id;  }
...
    int max = Enumerable::Max((IEnumerable<IFoo^>^) Foos, 
                              gcnew Func<IFoo^, int>(returnId));

关于用于 LINQ 静态方法的 C++/CLI Lambda 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19497473/

相关文章:

c++ - 与函数指针、__cdecl 和模板的混淆

c# - 在 C# 中从另一个列表更新一个列表中的项目的最优雅方法是什么?

c++ - 使用并行线程的矩阵乘法

c++ - 不使用 ASCII 将 int 转换为 char

c++ - C++ 中的常量函数

c# - MongoDB C# 驱动程序 : Query interceptors?

c# - 我如何使用 linq 作为 Microsoft 报告的数据源

c++ - MATLAB MEX 文件构建成功但未显示任何内容

visual-studio-2012 - 当前项目的 TypeScript 文件看不到 TypeScript 的链接文件

visual-studio - VS 2012 和 TFS 2010 的 checkin 策略错误 - CheckForWarningsPolicy