web-dev-qa-db-ja.com

C ++ / CLIでLINQを使用する方法-VS 2010 / .Net 4.0で

C++/CLIでLINQを使用する方法があるかどうか疑問に思っています。私はVS 2008に焦点を当てた投稿を1つ見つけ、System :: Stringクラスに対して一連の回避策を必要としました。 CodeProjectでいくつかのフレームワークの置き換えを見てきましたが、C++/CLIで直接使用する方法があるかどうか疑問に思っていました。できれば、誰でも良い例がありますか?

31
pstrjds

System::Linq名前空間で定義されているLinqメソッドを使用できますが、いくつかの追加の手順を実行する必要があります。

まず、C++/CLIは拡張メソッドをサポートしていません。ただし、拡張メソッドはSystem::Linqのさまざまなクラスで定義された通常のメソッドであるため、直接呼び出すことができます。

List<int>^ list = gcnew List<int>();
int i = Enumerable::FirstOrDefault(list);

次に、C++/CLIはラムダ式をサポートしていません。唯一の回避策は、実際のメソッドを宣言し、それをデリゲートとして渡すことです。

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));
    }
}
42
David Yaw