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