visual variable solo quitar poner mostrar float declarar decimales datos como c# parameters attributes decimal

variable - quitar decimales c#



usar valores decimales como parametros de atributo en c#? (5)

Cuando me encontré con esta situación, terminé exponiendo las propiedades en el atributo como un Doble, pero dentro del atributo las traté como Decimal. Lejos de ser perfecto, pero para los casos simples, podría ser lo que necesita.

He estado tratando de usar valores decimales como params para un atributo de campo pero obtengo un error de compilación.

Encontré este link publicación de blog que decía que no era posible en .Net usarlo, ¿alguien sabe por qué lo eligieron o cómo puedo usar los parametros decimales?

Gracias.


Esta es una restricción CLR. Solo las constantes primitivas o matrices de primitivas se pueden usar como parámetros de atributos. La razón es que un atributo debe codificarse completamente en metadatos. Esto es diferente de un cuerpo de método que está codificado en IL. El uso de MetaData solo restringe severamente el alcance de los valores que se pueden usar. En la versión actual del CLR, los valores de metadatos están limitados a primitivos, nulos, tipos y matrices de primitivas (puede haber pasado por alto uno menor).

Los decimales mientras que un tipo básico no son un tipo primitivo y, por lo tanto, no se pueden representar en metadatos, lo que impide que sea un parámetro de atributo.


Para trucos en tiempo real con atributos, estoy usando la clase TypeConverter .


Puedes usar el siguiente constructor. Cuando tiene un literal decimal en el código C #, el compilador C # emite una llamada a este constructor.

Decimal(Int32, Int32, Int32, Boolean, Byte)

Editar: sé que esto no es conveniente.


Tengo el mismo problema. Considero usar cadenas . Esto no es seguro, pero es legible y creo que podremos escribir números válidos en cadenas :-).

class BlahAttribute : Attribute { private decimal value; BlahAttribute(string number) { value = decimal.Parse(number, CultureInfo.InvariantCulture); } } [Blah("10.23")] class Foo {}

No es una belleza, pero después de considerar todas las opciones, es lo suficientemente bueno.