I\'m working with attributes at the moment. I often run into the error \'An attribute argument must be a constant expression, typeof expression or array creation expression
Constant expressions are values determined solely at compile-time, including string concatenation of other constant expressions, arithmetic etc.
So for example "" is a constant expression, but String.Empty isn't.
String is the only reference type to support a non-null constant expression. For value types, the primitive types (int etc) and decimal support constant expressions... although you can't use decimal in attributes, as it's not a primitive in the CLR. (You can't even specify decimal as a parameter type in an attribute constructor.)
See section 7.19 of the C# 4 spec for more information.