Вы можете использовать методы Linq, определенные в пространстве имен System::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));
}
}