Diberikan properti di kelas, dengan atribut - apa cara tercepat untuk menentukan apakah itu berisi atribut yang diberikan? Sebagai contoh:
[IsNotNullable]
[IsPK]
[IsIdentity]
[SequenceNameAttribute("Id")]
public Int32 Id
{
get
{
return _Id;
}
set
{
_Id = value;
}
}
Apa metode tercepat untuk menentukan bahwa misalnya ia memiliki atribut "IsIdentity"?
c#
performance
Otávio Décio
sumber
sumber
Attribute.IsDefined
akan menghilangkan satu baris kode dan array / casting yang jelek.[NotMapped]
di kelas tetapi untuk mendeteksinya Anda harus menggunakanAttribute.IsDefined(pi, typeof(NotMappedAttribute))
IsIdentity[] attr = pi.GetCustomAttributes<IsIdentity>(false);
Jika Anda menggunakan .NET 3.5 Anda dapat mencoba dengan pohon Ekspresi. Ini lebih aman daripada refleksi:
sumber
Anda dapat menggunakan metode umum (generik) untuk membaca atribut melalui MemberInfo yang diberikan
sumber
Untuk memperbarui dan / atau meningkatkan jawaban oleh @Hans Passant, saya akan memisahkan pengambilan properti menjadi metode ekstensi. Ini memiliki manfaat tambahan dari menghilangkan string sihir jahat dalam metode GetProperty ()
Tes Anda kemudian dikurangi menjadi dua baris
sumber
Jika Anda mencoba melakukan itu di Portable Class Library PCL (seperti saya), maka inilah cara Anda dapat melakukannya :)
Anda kemudian dapat memeriksa jumlah properti yang memiliki properti khusus ini jika perlu.
sumber
Ini sekarang dapat dilakukan tanpa pohon ekspresi dan metode ekstensi dalam jenis yang aman dengan fitur C # baru
nameof()
seperti ini:nameof () diperkenalkan di C # 6
sumber
Anda dapat menggunakan metode Attribute.IsDefined
https://msdn.microsoft.com/en-us/library/system.attribute.isdefined(v=vs.110).aspx
Anda dapat memberikan properti yang Anda cari secara spesifik atau Anda dapat menggunakannya kembali menggunakan refleksi, seperti:
sumber
Ini pertanyaan yang cukup lama tapi saya gunakan
Metode saya memiliki parameter ini tetapi dapat dibangun:
Kemudian dalam metode ini:
sumber