In C#, a Conditional method is not always executed. It is compiled into the program only when certain symbols are defined with #define.
The Conditional attribute enables conditional compilation. It accepts a string
argument—this is the symbol that must be defined for the method to be compiled.
This example program contains a MethodA
, which is conditional on the symbol PERLS. It also contains MethodB
, which is conditional on the symbol DOT.
MethodA
is executed, but MethodB
is not.void
context.#define PERLS #undef DOT using System; using System.Diagnostics; class Program { static void Main() { MethodA(); MethodB(); } [Conditional("PERLS")] static void MethodA() { Console.WriteLine(true); } [Conditional("DOT")] static void MethodB() { Console.WriteLine(false); } }True
List
It is possible to modify a collection in DEBUG mode. You can add strings or other values conditionally—when debugging your application, not when it's deployed.
AddToArray
method, which simply adds two elements to the array. It uses the Conditional("DEBUG") attribute.System.Diagnostics
.using System; using System.Collections.Generic; using System.Diagnostics; class Program { static void Main() { List<string> l = new List<string>(); l.Add("rabbit"); l.Add("bird"); AddToArray(l); Console.WriteLine("Elements: {0}", l.Count); } [Conditional("DEBUG")] static void AddToArray(List<string> l) { // New array string[] a = new string[2]; a[0] = "cat"; a[1] = "mouse"; // Add array to end of list l.AddRange(a); } }Elements: 4Elements: 2
You can encapsulate your DEBUG-specific logic in separate Conditional("DEBUG") methods. This improves code clarity and performance, and reduces complexity.
Conditional allows us to create a method whose existence depends on a preprocessor directive. The Conditional attribute fits with the clear syntax of the C# language.