How do I create a constant that is an array?

Strictly speaking you can’t, since const can only be applied to a field or local whose value is known at compile time.

In both the lines below, the right-hand is not a constant expression (not in C#).

const int [] constIntArray = newint [] {2, 3, 4};
 // error CS0133: The expression being assigned to ‘constIntArray’ must be constant
const int [] constIntArrayAnother = {2, 3, 4};
 // error CS0623: Array initializers can only be used in a variable or field
 //               initializer. Try using a new expression instead. 

However, there are some workarounds, depending on what it is you want to achieve.

If want a proper .NET array (System.Array) that cannot be reassigned, then static readonly will do for you.

static readonly int [] constIntArray = new int[] {1, 2, 3};

The constIntArray field will be initialized before it its first use.

If, on the other hand, you really need a const set of values (say as an argument to an attribute constructor), then – if you can limit yourself to integral types – an enum would serve you well.

For example:

public enum Role
	Administrator = 1,
	BackupOperator = 2,
	// etc. 

public class RoleAttribute : Attribute
	public RoleAttribute()
		CreateRole = DefaultRole;

	public RoleAttribute(Role role)
		CreateRole = role;

	public Role CreateRole
		get { return this.createRole; }
		set { this.createRole = value; }

	private Role createRole = 0;
	public const Role DefaultRole = Role.Administrator
	 | Role.BackupOperator;

public class DatabaseAccount

RoleAttribute, instead of taking an array, would only take a single argument of flags (appropriately or-ed). If the underlying type of the Role enum is long or ulong, that gives you 64 different Roles.

[Author: SantoshZ]