Comment utiliser LINQ en C++/CLI - dans VS 2010/.Net 4.0
Demandais juste si il y a un moyen d'utiliser LINQ en C++/CLI. J'ai trouvé un post qui a été porté sur VS 2008 et a exigé un tas de solutions pour le Système::String. J'ai vu certains cadre des remplacements sur CodeProject, mais je me demandais si il existe un moyen de l'utiliser directement en C++/CLI. Si vous le pouvez, n'importe qui ont un bon exemple?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser Linq méthodes qui sont définies dans le
System::Linq
espace de noms, mais vous aurez à sauter à travers un couple supplémentaire de cerceaux.Première, C++/CLI ne prend pas en charge les méthodes d'extension. Cependant, les méthodes d'extension sont régulières des méthodes définies dans les différentes classes en
System::Linq
, de sorte que vous pouvez les appeler directement.Deuxième, C++/CLI ne prend pas en charge les expressions lambda. La seule solution est de déclarer une méthode réelle, et le passer en tant que délégué.
GreaterThanZero
fonction ?Parlez-vous de "Language Integrated Query" ou la
System::Linq
espace de noms? Chaque programmeur, je sais préfère l'appel de la fonction syntaxe au lieu de la syntaxe LINQ.C++/CLI ne prend pas en charge la syntaxe LINQ. Les bases de données ont pris en charge une forme de language integrated query dans le passé, appelé Embedded SQL, ce qui est assez mort ces jours-ci. Embedded SQL (et, plus tard, LINQ-to-SQL) était une idée stupide pour commencer, les gens ont depuis trouvé que la requête de base de la logique devrait être dans la base de données et à ne pas mélanger dans la logique d'affaires.
LINQ-to-objets est plus utile, mais la syntaxe SQL se sent juste de sortir de la place. Donc, C#, programmeurs ont tendance à appeler le LINQ des fonctions de la bibliothèque directement.
C++ n'est pas vraiment besoin de LINQ, parce que nous avons des modèles. Les algorithmes de la bibliothèque standard rendue possible par les modèles sont un sur-ensemble des avantages de LINQ: Ils peuvent être spécialisés pour notamment les conteneurs, mais vous obtiendrez une bonne valeur par défaut de la mise en œuvre sans l'aide de la classe container. Et ils compiler beaucoup plus efficace de code, parce que la résolution de surcharge qui se passe après la spécialisation (à la différence des génériques). Ok, les modèles ne sont pas aussi bons pour l'exécution de réflexion comme les génériques, mais C# les méthodes d'extension ne joue pas bien avec de l'exécution de réflexion soit. Le plus grand inconvénient de la norme C++ algorithmes a été le niveau de verbosité de la rédaction du prédicat de foncteurs, mais le C++0x introduit lambdas qui prendre soin de cela.
Vraiment ce que le C++/CLI besoins est une version de la norme algorithmes qui fonctionne sur .NET des contenants. Et ici, il est. Par exemple, LINQ
Where
méthode correspond d'assez près àfind_if
. Maintenant nous avons juste besoin de Microsoft de se dépêcher et de mettre en œuvre la finale C++0x spec.