C'est vraiment incroyable mais réel. Ce code ne fonctionnera pas:
[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; }
}
Pendant que cela fonctionne:
[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 peut me dire pourquoi le double est OK alors que la décimale ne l'est pas.
c#
.net
attributes
Cheng Chen
la source
la source
Réponses:
Tiré de cette réponse par JaredPar .
la source
Enum
sont pris en charge. J'ai actuellement 2 attributs personnalisés l'un avec 2 énumérations et les autres avec un tableau d'énumérations.D'après les spécifications :
la source
sbyte
,ushort
,uint
,ulong
. Et cela semble bien fonctionner. Maisdecimal
n'est toujours pas autorisé :-(La réponse à ce problème est d'utiliser des chaînes, qui sont autorisées comme attributs bien qu'elles ne soient pas de type atomique. N'utilisez pas de doubles car l'arrondi rendra les résultats moins précis.
la source