Cool C#, LINQ/Lambdas vous tromper n'ai jamais tiré?
Vu un post sur les fonctionnalités cachées en C#, mais pas beaucoup de gens ont écrit linq/lambdas exemple donc... je me demande...
Ce qui est le plus cool (comme dans le plus élégant) l'utilisation du C#, LINQ et/ou de Lambda/anonyme délégués que vous avez jamais vu/écrit?
Bonus si il a est entré en production trop!
Vous devez vous connecter pour publier un commentaire.
La LINQ Raytracer certainement sommets ma liste =)
Je ne suis pas sûr si les qualifie élégant, mais il est très certainement le plus cool de linq-expression que j'ai jamais vu!
Oh, et juste pour être très clair, je n'ai pas l'écrire (Luc Hoban n')
De base fonctionnelles:
Ne pas faire beaucoup de bien si vous ne savez pas comment les utiliser. Dans le but de savoir que vous besoin de savoir ce qu'ils sont pour:
De loin la plus impressionnante Linq mise en œuvre que j'ai jamais rencontré est le Brahma-cadre.
Il peut être utilisé pour décharger le parallèle des calculs pour le GPU en utilisant "Linq to GPU'. Vous écrivez une "requête" de linq, puis Brahma traduit en HLSL (High Level Shader Language) afin de DirectX peut traiter sur le GPU.
Ce site ne permettez-moi de coller un lien pour essayer ce webcast de dotnetrocks:
http://www.dotnetrocks.com/default.aspx?showNum=466
D'autre google pour Brahma Projet, vous obtiendrez les pages de droite.
Extrêmement cool.
GJ
Rapports Sur Les Progrès Réalisés pour de longues requêtes LINQ. Dans le billet de blog, vous pouvez trouver une méthode d'extension WithProgressReporting() qui vous permet de découvrir et de faire rapport sur les progrès d'une requête linq comme il l'exécute.
http://igoro.com/archive/extended-linq-additional-operators-for-linq-to-objects/
http://igoro.com/archive/7-tricks-to-simplify-your-programs-with-linq/
Pour moi, la dualité entre les délégués (
Func<T,R>
,Action<T>
) et des expressions (Expression<Func<T,R>>
Expression<Action<T>>
) est ce qui donne lieu à des utilisations les plus habiles de lambdas.Par exemple:
Ensuite, vous pouvez "en toute sécurité" mettre en œuvre
INotifyPropertyChanged
en appelantRemarque : j'ai vu cela sur le web à première il y a quelques semaines, puis a perdu le lien et un score de variations ont surgi ici et là depuis je crains que je ne peut pas donner la bonne attribution.
En fait, je suis assez fière de ce pour la génération d'Excel docments: http://www.aaron-powell.com/linq-to-xml-to-excel
Pas ma conception, mais je l'ai utilisé quelques fois, typé-instruction switch: http://community.bartdesmet.net/blogs/bart/archive/2008/03/30/a-functional-c-type-switch.aspx
M'a sauvé tellement de nombreux if... else if... else if... else if! états
J'ai fait une (un peu fou, mais intéressant) chose comme ça récemment:
J'ai essayé de trouver une façon cool de construire un contrôle de navigation pour un site, j'ai été la construction. J'ai voulu l'utiliser régulièrement HTML liste non ordonnée d'éléments (employant la norme CSS "Sucker Poisson" regardez) avec un haut-de navigation de la souris sur l'effet que révèle la liste des éléments. J'ai eu un sql dépendante de la mise en cache DataSet avec deux tables (NavigationTopLevels & NavigationBottomLevels). Ensuite, tout ce que je devais était de créer deux objets de la classe (TopNav & SubNav) avec les quelques propriétés requises (le TopNav classe a dû avoir une liste générique de bottomnav éléments -> Liste<SubNav> Points).
Il pourrait ne pas être le "plus cool", mais pour beaucoup de gens qui veulent avoir une navigation dynamique, son doux de ne pas avoir de confusion autour de l'habitude de boucle logique qui vient avec ça. LINQ est, si quoi que ce soit d'un gain de temps dans ce cas.
Je pense que LINQ est un changement majeur pour .NET et c'est un outil très puissant.
J'ai utiliser LINQ to XML dans la production d'analyser et de filtrer les enregistrements à partir d'un 6MO fichier XML (avec plus de 20 niveaux de nœuds) dans un jeu de données en deux lignes de code.
Avant de LINQ cela aurait pris des centaines de lignes de code et les jours de débogage.
C'est ce que j'appelle élégant!
Peut-être pas le plus cool, mais récemment, j'ai été de les utiliser à tout moment, j'ai un bloc de code C+Pd maintes et maintes fois pour les avoir seulement quelques lignes de changement. Par exemple, l'exécution de simples commandes SQL pour extraire des données peut être fait comme suit:
Qui pourrait revenir à une liste de Postes qui ont été créés aujourd'hui. De cette façon, je n'ai pas de copier et de coller le try-catch-finally bloc de quinze millions de fois pour chaque commande, de l'objet, et cetera.
De travailler avec les attributs:
La
GetAttributes
méthode d'extension:AttributeSelection
est le code de production et définit égalementGetAttribute
etHasAttribute
. J'ai choisi d'utiliser lelet
etwhere
clauses dans cet exemple.OLINQ réactif requêtes LINQ sur INotifyingCollection - ci vous permettent de le faire (entre autres choses) agrégation en temps réel contre les grands ensembles de données.
https://github.com/wasabii/OLinq