To naprawdę niewiarygodne, ale prawdziwe. Ten kod nie zadziała:
[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; }
}
Chociaż to działa:
[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; }
}
Kto może mi powiedzieć, dlaczego podwójne jest OK, a dziesiętne nie.
c#
.net
attributes
Cheng Chen
źródło
źródło
Odpowiedzi:
Zaczerpnięte z tej odpowiedzi JaredPar .
źródło
Enum
są obsługiwane. Obecnie mam 2 atrybuty niestandardowe, jeden z 2 wyliczeniami, a pozostałe z tablicą wyliczeń.Ze specyfikacji :
źródło
sbyte
,ushort
,uint
,ulong
. I wydaje się, że działa dobrze. Ale nadaldecimal
nie jest dozwolone :-(Odpowiedzią na ten problem jest użycie łańcuchów, które są dozwolone jako atrybuty, mimo że nie są typem atomowym. Nie używaj podwójnych liczb, ponieważ zaokrąglanie spowoduje, że wyniki będą mniej dokładne.
źródło