2010-06-24 7 views
2

est-il un moyen de créer des macros dans C#Création de macro dans C#

ex:

chaîne checkString = " 'bob' == 'bobthebuilder'" (ce sera dynamique)

si (@@ checkString) // ......... autre // .........

Merci

Répondre

1

non, C# ne pas les macros. Vous pourriez capturer votre logique dans un délégué et appliquer ce délégué à plusieurs endroits, potentiellement ... cela vous aiderait-il?

Si vous pouviez décrire le problème que vous tentez de résoudre plutôt que la solution que vous souhaitez, nous pourrons peut-être vous aider davantage.

0

Réponse courte: Non

Réponse longue: Vous pouvez écrire un wrapper autour de préprocesseur du compilateur C/C++.

La plupart de la syntaxe sera acceptée à l'exception notable de # région/# endregion. Vous pouvez juste préfixer ceux aveC#pragma avant le traitement, et enlever la partie #pragma après.

1

T4 semble gagner du terrain ces jours-ci pour le travail .NET. Ce n'est pas tout à fait ce que vous avez demandé, mais il peut être extrêmement bénéfique dans certains cas (ou il peut être juste un indice sur le mauvais chemin).

Dans la plupart des cas, esp. avec les génériques, je ne souhaite pas de 'templates' ou de 'macros' en C# (ou Scala). Dans l'exemple ci-dessus, vous pouvez simplement utiliser:

bool sameStuff = "'bob' == 'bobthebuilder'"; 
... 
if (sameStuff) { 
    ... 
} 

Les cas plus complexes peuvent généralement être traitées avec des méthodes de refactoring ou en utilisant des fonctions anonymes.

De plus, les attributs (bien que complètement différents) complètent le cas de nombreuses utilisations «traditionnelles» des modèles.

1

Comme mentionné, non, mais il y a un certain nombre d'autres approches:

  • Conditional compilation via #if
  • Templating via T4 ou autre chose (nous utilisons un port de Ned Batchelder (mentionné) Cog
  • Programmation orientée aspect par quelque chose comme
  • Comme Jon l'a dit, de nombreuses façons, il vaudrait mieux décrire exactement ce que vous voulez faire