¿Hay alguna solución para el siguiente problema?Un argumento de atributo debe ser una expresión constante
Un argumento atributo debe ser una expresión constante
Quiero usar decimales en el parámetro de un atributo.
¿Hay alguna solución para el siguiente problema?Un argumento de atributo debe ser una expresión constante
Un argumento atributo debe ser una expresión constante
Quiero usar decimales en el parámetro de un atributo.
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.
Qué atributo? – AMissico