É realmente inacreditável, mas real. Este código não 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; }
}
Enquanto isso 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; }
}
Quem pode me dizer por que o dobro está OK e o decimal não.
c#
.net
attributes
Cheng Chen
fonte
fonte
Respostas:
Retirado desta resposta por JaredPar .
fonte
Enum
são suportados. Atualmente, tenho 2 atributos personalizados, um com 2 enumerações e os outros com uma matriz de enumeração.Das especificações :
fonte
sbyte
,ushort
,uint
,ulong
. E isso parece funcionar bem. Mas aindadecimal
não é permitido :-(A resposta para esse problema é usar cadeias, que são permitidas como atributos, apesar de não serem do tipo atômico. Não use duplos, pois o arredondamento tornará os resultados menos precisos.
fonte