2009-10-07 10 views
1

Existe-t-il un moyen d'ajouter des mots-clés linq personnalisés et de dire au compilateur comment les traduire en méthodes d'extension réelles?Extension des traductions LINQ du compilateur

Par exemple, traduisez les simple mot-clé:

var color = from c in colors 
      where c.IsFavorite 
      select single c 

Pour

var color = colors.Where(c => c.IsFavorite).SingleOrDefault(); 

Répondre

2

Non il n'y a pas moyen de le faire. Pour ce qui est de savoir pourquoi, j'ai travaillé sur l'implémentation LINK de VB.Net par rapport à C#, mais les problèmes sont pour l'essentiel les mêmes. Ajouter LINQ à la langue était une entreprise gigantesque. Comme Eric Lippert a blogged about recently, LINQ correspond à peine à l'horaire VS2008 et en tant que tel, essentiellement seules les fonctionnalités qui étaient absolument essentielles à l'expédition de LINQ ont été ajoutées à la langue. Rendre LINQ arbitrairement extensible aux utilisateurs ne faisait pas partie de ces fonctionnalités. C'est aussi quelque chose qui aurait été très coûteux. En ce moment LINQ est une fonctionnalité très complexe qui a un ensemble fixe de constructions. Ce qui lui permet d'être arbitrairement extensible aurait fortement gonflé ces coûts (en particulier sur le côté IDE) dans au moins les domaines suivants

  • Design Language (énorme)
  • IntelliSense
  • Impression Jolie/Mise en forme
  • code de niveau bas émette détails
  • etc ...
+0

:) réponse courte et simple I deviner. Des informations plus spécifiques sur pourquoi pas? Est-ce que le compilateur est une source fermée, une limitation spécifique dans les standards C# etc? –

+0

@Paul, a ajouté une brève explication de pourquoi. – JaredPar

+0

Merci pour les bons commentaires! –

Questions connexes