如何在C++/CLI中使用LINQ - 在VS 2010/.Net 4.0中

pst*_*jds 31 linq c++-cli .net-4.0 visual-studio-2010

只是想知道是否有办法在C++/CLI中使用LINQ.我找到了一篇专注于VS 2008的帖子,需要为System :: String类提供一些解决方法.我在CodeProject上看到了一些框架替换,但我想知道是否有一种方法可以直接在C++/CLI中使用它.如果可以,任何人都有一个好榜样?

Dav*_*Yaw 42

您可以使用System::Linq命名空间中定义的Linq方法,但是您必须跳过几个额外的环节.

首先,C++/CLI不支持扩展方法.但是,扩展方法是在各种类中定义的常规方法System::Linq,因此您可以直接调用它们.

List<int>^ list = gcnew List<int>();
int i = Enumerable::FirstOrDefault(list);
Run Code Online (Sandbox Code Playgroud)

其次,C++/CLI不支持lambda表达式.唯一的解决方法是声明一个实际的方法,并将其作为委托传递.

ref class Foo
{
public:
    static bool GreaterThanZero(int i) { return i > 0; }

    void Bar()
    {
        List<int>^ list = gcnew List<int>();
        int i = Enumerable::FirstOrDefault(list, gcnew Func<int, bool>(&Foo::GreaterThanZero));
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 是否可以将C++ 11 lambda用于`GreaterThanZero`函数? (11认同)