Ini benar-benar tidak bisa dipercaya tapi nyata. Kode ini tidak akan berfungsi:
[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; }
}
Saat ini berfungsi:
[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; }
}
Siapa yang bisa memberi tahu saya mengapa dua kali lipat tidak apa-apa sedangkan desimal tidak.
c#
.net
attributes
Cheng Chen
sumber
sumber
Jawaban:
Diambil dari ini jawaban oleh JaredPar .
sumber
Enum
didukung. Saat ini saya memiliki 2 atribut khusus, satu dengan 2 enum dan yang lainnya dengan array enum.Dari spesifikasi :
sumber
sbyte
,ushort
,uint
,ulong
. Dan itu tampaknya berhasil. Tapi tetapdecimal
tidak diperbolehkan :-(Jawaban untuk masalah ini adalah dengan menggunakan string, yang diizinkan sebagai atribut meskipun bukan merupakan tipe atom. Jangan gunakan ganda karena pembulatan akan membuat hasil kurang akurat.
public String MinimumValue { get { return minimumValueDecimal.ToString(); } set { minimumValueDecimal = Decimal.Parse(value); } } private decimal minimumValueDecimal;
sumber