2010-05-04 46 views

Respuesta

31

Desafortunadamente no puede usar decimales en los valores de los atributos, ya que el CLR no sabe realmente sobre el tipo System.Decimal - no es un tipo primitivo como int, doble etc. El compilador C# básicamente lo falsifica para los campos const de tipo decimal, pero no puede lograr el mismo efecto con los atributos.

De la especificación C# 3, sección 17.1.3:

Los tipos de posicionales y nombrados parámetros para una clase de atributo son limitados para el parámetro atributo tipos, que son:

  • Uno de los siguientes tipos: bool, byte, char, doble, flotante, int, largo, sbyte, corto, cadena, uint, ulong, ushort.
  • El tipo de objeto.
  • El tipo System.Type.
  • Un tipo de enumeración , siempre que tenga pública accesibilidad y los tipos en los que está anidado (si los hay) también han público accesibilidad (§ 17.2).
  • Arrays unidimensionales de los tipos anteriores .

Luego más adelante en la sección 17.2:

Una expresión E es un atributo-argumento-expresión si todas las siguientes afirmaciones son> true:

  • el tipo de e es un tipo de parámetro de atributo (§17.1.3).
  • En tiempo de compilación, el valor de E se puede resolvió uno de los siguientes:
    • Un valor constante.
    • Un objeto System.Type.
    • Una matriz unidimensional de attribute-argument-expressions.
Cuestiones relacionadas