Es ist wirklich unglaublich, aber echt. Dieser Code funktioniert nicht:
[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; }
}
Während dies funktioniert:
[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; }
}
Wer kann mir sagen, warum double in Ordnung ist, decimal nicht?
c#
.net
attributes
Cheng Chen
quelle
quelle
Antworten:
Entnommen aus dieser Antwort von JaredPar .
quelle
Enum
werden unterstützt. Ich habe derzeit 2 benutzerdefinierte Attribute, eines mit 2 Aufzählungen und die anderen mit einem Array von Aufzählungen.Aus den Spezifikationen :
quelle
sbyte
,ushort
,uint
,ulong
. Und das scheint in Ordnung zu sein. Aber immer nochdecimal
nicht erlaubt :-(Die Antwort auf dieses Problem besteht darin, Zeichenfolgen zu verwenden, die als Attribute zulässig sind, obwohl sie kein atomarer Typ sind. Verwenden Sie keine Doppelwerte, da durch Rundungen die Ergebnisse weniger genau werden.
quelle