Le préprocesseur est le traitement effectué par le compilateur pour modifier le fichier source (en mémoire seulement) avant de le compiler. Il permet une compilation conditionnelle (fonctions de deboggage à exclure quand l'application est finalisée, fonctionnalités selon des options, ...), il modifie donc la façon de compiler les fichiers sources.
Syntaxe générale des directives.
Une directive est toujours placée seule sur une ligne de texte et commence par le caractère dièse ( codice_1 ). Le premier mot identifie la directive. Il est éventuellement suivi de paramètres.
Exemple :
 #pragma warning disable
La directive codice_2 est suivie des paramètres codice_3 et codice_4.
Portée des directives.
La portée d'une directive commence à partir de la ligne qui suit cette directive, jusqu'à la fin du fichier source, ou la prochaine contre-directive.
Avertissements du compilateur.
Lors de la compilation, des avertissements sont générés pour attirer le programmeur sur certaines instructions du fichier source potentiellement ambiguës ou dangereuses. Si le programmeur, après vérification de l'endroit indiqué, estime que le danger potentiel ne peut arriver, ou qu'il s'agit bien de ce qu'il faut faire, il est possible d'enlever les avertissements dans une zone du fichier source afin que les avertissements inutiles ne soit plus générés.
Ignorer un avertissement.
Pour ignorer un avertissement, la directive est la suivante :
 #pragma warning disable "codes"
Où codice_5 est la liste des codes des avertissements à ignorer. Ces codes correspondent à ceux affichés par le compilateur, sans le préfixe "codice_6".
Ignorer tous les avertissements.
Pour ignorer tous les avertissements, la directive est la même que la précédente, sans aucun code :
Restaurer un avertissement.
Pour restaurer la génération d'un avertissement, c'est à dire ne plus l'ignorer, la directive est la suivante :
 #pragma warning restore "codes"
Où codice_5 est la liste des codes des avertissements à restaurer.
Restaurer tous les avertissements.
Pour restaurer tous les avertissements, la directive est la même que la précédente, sans aucun code :
Symboles de compilation.
Un symbole est défini avec la directive codice_8. Il possède un nom mais ne peut prendre de valeur en C#, à la différence d'autres langages comme le C ou le C++.
La syntaxe est la suivante :
 #define "nom_du_symbole" 
Le symbole est défini jusqu'à la fin ou jusqu'à la directive codice_9 correspondante. La syntaxe de cette directive est la suivante :
 #undef "nom_du_symbole"
Exemple :
Compilation conditionnelle.
La syntaxe générale des directives de compilation conditionnelle est la suivante :
 #if "condition"
 "à compiler si la condition est vraie"
 #elif "condition"
 "sinon, à compiler si la condition est vraie"
 "...#elif..."
 #else
 "à compiler sinon"
 #endif
Les blocs codice_10 et codice_11 sont optionnels.
La condition peut avoir l'une des syntaxes suivantes :
La compilation conditionnelle est souvent utilisée pour les fonctions de déboggage. Par exemple :
// Fonction de déboggage
public void trace(string message)
 Console.WriteLine(message);
public void traitement()
 trace("Début de la fonction traitement()");
 trace("Fin de la fonction traitement()");
Pour ce genre de condition, l'attribut codice_17 est plus simple à utiliser :
// Fonction de déboggage
[Conditionnal("DEBUG")]
public void trace(string message)
 Console.WriteLine(message);
public void traitement()
 trace("Début de la fonction traitement()");
 trace("Fin de la fonction traitement()");
Générer une erreur ou un avertissement.
Il est possible qu'une certaine combinaison de symboles n'ait pas de sens, ou ne devrait pas être utilisée. Pour prévenir ce risque, en testant la condition correspondante, il est possible de générer une erreur ou un avertissement à la compilation, en utilisant les directives suivantes :
 #error "message"
 #warning "message"
Délimiter une région du code.
Délimiter une région sert à regrouper des lignes de codes (méthodes, classes, ...).
Les régions de code sont utilisés dans les éditeurs de code spécialisés (Visual Studio, ...) pour permettre leur réduction. Lorsque la région est cachée, trois points de suspension apparaissent à la place des lignes contenues dans la région. Ces lignes apparaissent dans une bulle d'information lorsque le curseur de la souris passe sur ces trois points de suspension.
La syntaxe est la suivante :
 #region "description courte de la région de code"
 #endregion

Programmation C sharp/Structures de contrôle