X++, C# Comparison: Switch [AX 2012]
Updated: June 21, 2012
Applies To: Microsoft Dynamics AX 2012 R3, Microsoft Dynamics AX 2012 R2, Microsoft Dynamics AX 2012 Feature Pack, Microsoft Dynamics AX 2012
This topic compares the switch statement in X++ and C#.
In both X++ and C#, the switch statement involves the keywords case, break, and default.
The following table lists the differences in the switch statement between X++ and C#.
|
Feature |
X++ |
C# |
Comments |
|---|---|---|---|
|
break; at the end of each case block |
In X++, when any case block matches the expression value on the switch clause, all other case and default blocks are executed until a break; statement is reached. No break; statement is ever required in an X++ switch statement, but break; statements are important in almost all practical situations. |
In C#, a break; statement is always needed after the statements in a case or default block. If a case clause has no statements between itself and the next case clause, a break; statement is not required between the two case clauses. |
We recommend against omitting the break; statement after any case block, because it can confuse the next programmer who edits the code. |
|
break; at the end of the default block |
In X++ there is no effect of adding a break; statement at the end of the default block. |
In C# the compiler requires a break; statement at the end of the default block. |
For more information, see Switch Statements. |
|
Only constant values on a case block |
In X++ you can specify either a literal value or a variable on a case block. For example, you can write case myInteger:. |
In C# you must specify exactly one literal value on each case block, and no variables are allowed. |
No comments. |
|
Multiple values on one case block |
In X++ you can specify multiple values on each case block. The values must be separated by a comma. For example, you can write case 4,5,myInteger:. |
In C# you must specify exactly one value on each case block. |
In X++ it is better to write multiple values on one case block than to omit the break; statement at the end of one or more case blocks. |
The following sections show comparable switch statements in X++ and C#.
X++ switch Example
The X++ switch example shows the following:
-
case iTemp: and case (93-90): to show that case expressions are not limited to constants, as they are in C#.
-
//break; to show that break; statements are not required in X++, although they are almost always desirable.
-
case 2, (93-90), 5: to show that multiple expressions can be listed on on case clause in X++.
static void GXppSwitchJob21(Args _args) // X++ job in AOT > Jobs.
{
int iEnum = 3;
int iTemp = 6;
switch (iEnum)
{
case 1:
case iTemp: // 6
info(strFmt("iEnum is one of these values: 1,6: %1", iEnum));
break;
case 2, (93-90), str2Int("5"): // Equivalent to three 'case' clauses stacked, valid in X++.
//case 2:
//case (93-90): // Value after each 'case' can be a constant, variable, or expression; in X++.
//case str2Int("5"):
info(strFmt("iEnum is one of these values: 2,3,5: %1", iEnum));
//break; // Not required in X++, but usually wanted.
case 4:
info(strFmt("iEnum is one of these values: 4: %1", iEnum));
break;
default:
info(strFmt("iEnum is an unforeseen value: %1", iEnum));
break;
// None of these 'break' occurrences in this example are required for X++ compiler.
}
return;
}
/*** Copied from the Infolog:
Message (02:32:08 pm)
iEnum is one of these values: 2,3,5: 3
iEnum is one of these values: 4: 3
***/
C# switch Example
The C# switch example shows the following:
-
case 1: has a comment explaining that only constant expressions can be given on a case clause.
-
break; statements occur after the last statement in each case block that has statements, as is required by C#.
using System; // C# namespace CSharpSwitch2 { class Program { static void Main(string[] args) // C# { int iEnum = 3; switch (iEnum) { case 1: // Value after each 'case' must be a constant. case 6: Console.WriteLine("iEnum is one of these values: 1,6: " + iEnum.ToString()); break; //case 2,3,5: // In C# this syntax is invalid, and multiple 'case' clauses are needed. case 2: case 3: case 5: Console.WriteLine("iEnum is one of these values: 2,3,5: " + iEnum.ToString()); break; case 4: Console.WriteLine("iEnum is one of these values: 4: " + iEnum.ToString()); break; default: Console.WriteLine("iEnum is an unforeseen value: " + iEnum.ToString()); break; // All 'break' occurrences in this example are required for C# compiler. } return; } } } /*** Output copied from the console: >> CSharpSwitch2.exe iEnum is one of these values: 2,3,5: 3 >> ***/
Announcements: New book: "Inside Microsoft Dynamics AX 2012 R3" now available. Get your copy at the MS Press Store.