Es realmente increíble pero real. Este código no funcionará:
[AttributeUsage(AttributeTargets.Property|AttributeTargets.Field)]
public class Range : Attribute
{
public decimal Max { get; set; }
public decimal Min { get; set; }
}
public class Item
{
[Range(Min=0m,Max=1000m)] //compile error:'Min' is not a valid named attribute argument because it is not a valid attribute parameter type
public decimal Total { get; set; }
}
Mientras esto funciona:
[AttributeUsage(AttributeTargets.Property|AttributeTargets.Field)]
public class Range : Attribute
{
public double Max { get; set; }
public double Min { get; set; }
}
public class Item
{
[Range(Min=0d,Max=1000d)]
public decimal Total { get; set; }
}
¿Quién puede decirme por qué el doble está bien mientras que el decimal no lo está?
c#
.net
attributes
Cheng Chen
fuente
fuente
Respuestas:
Tomado de esta respuesta por JaredPar .
fuente
Enum
son compatibles. Actualmente tengo 2 atributos personalizados, uno con 2 enumeraciones y los otros con una matriz de enumeración.De las especificaciones :
fuente
sbyte
,ushort
,uint
,ulong
. Y eso parece funcionar bien. Pero todavíadecimal
no está permitido :-(La respuesta a este problema es usar cadenas, que están permitidas como atributos a pesar de no ser de tipo atómico. No use dobles ya que el redondeo hará que los resultados sean menos precisos.
fuente