In the .NET Framework, an enumeration commonly represents constant values as symbolic or literal names. For example, if you have the type Color, then instead of using the values 0, 1, and 2, you can use Red, Green, and Blue. In C/AL, you must assign an enumeration to an Integer data type, so you must convert symbolic names in the .NET Framework to integers in C/AL.


This example shows how to use an enumeration in integer expressions in C/AL and then convert the text string back to an integer to store it in the enumeration variable. In the following C# example, the enumeration is contained in the Microsoft.Dynamics.Nav.EnumSample assembly.

C#  Copy Code
namespace Microsoft.Dynamics.Nav.EnumSample 
	public class DataTypes
		public enum ItemEnum

In the Microsoft Dynamics NAV object, define the following C/AL variables.

Variable name DataType SubType Length



'Microsoft.Dynamics.Nav.EnumSample, Version=, Culture=neutral, PublicKeyToken=18cff5e0dac2f853'. Microsoft.Dynamics.Nav.EnumSample.DataTypes.ItemEnum






To handle the enumerator type, add the following code to a C/AL function.

  Copy Code
// Assign an integer to the .NET Framework enumeration.
// This assigns Item3 because enum values are zero-based.
varDotNet := 2; 
// Convert the enum object to a text string, which is equivalent to the
// .NET Framework ToString method.
formatResult := format(varDotNet);
if formatResult <> 'Item3' then
  error('Wrong enumeration value. Expected %1, but actual was %2.', 'Item3', formatResult);
// Assuming that the enum value is stored as a text string, convert it back to the
// proper enum value.
varDotNet := varDotNet.Parse(varDotNet.GetType(), 'Item4');
// The varDotNet enum should now contain the integer value 3 and the enum 'Item4'.
alInteger := varDotNet;
if alInteger <> 3 then
  error('Wrong enumeration integer value. Expected %1, but actual was %2.', 3, alInteger);
formatResult := format(varDotNet);
if formatResult <> 'Item4' then
  error('Wrong enumeration value. Expected %1, actual was %2.', 'Item4', formatResult);

See Also