Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencari Sifat C# yang Dihiasi dengan Atribut Khusus (AllowMultiple = palsu) dengan Cekap?

Bagaimanakah Saya Boleh Mencari Sifat C# yang Dihiasi dengan Atribut Khusus (AllowMultiple = palsu) dengan Cekap?

Barbara Streisand
Barbara Streisandasal
2024-12-28 02:28:09979semak imbas

How Can I Efficiently Find C# Properties Decorated with a Specific Attribute (AllowMultiple = false)?

Mengoptimumkan Carian Atribut dalam C# Properties

Dalam dunia refleksi .NET, mendapatkan semula senarai sifat yang dihiasi dengan atribut tertentu boleh menjadi keperluan yang kerap. Soalan di tangan berkaitan dengan mengenal pasti sifat yang mengandungi atribut MyAttribute, di mana AllowMultiple ditetapkan kepada palsu.

Pendekatan awal yang dibentangkan diulang melalui semua sifat menggunakan t.GetProperties(), diikuti dengan gelung untuk memeriksa setiap sifat sifat dengan prop.GetCustomAttributes(typeof(MyAttribute), true). Walaupun kaedah ini berfungsi, ia melibatkan mencipta berbilang kejadian atribut, yang boleh menjadi tidak cekap.

Berikut ialah penyelesaian yang lebih baik yang memanfaatkan kaedah sambungan Where daripada LINQ:

var props = t.GetProperties().Where(
                prop => Attribute.IsDefined(prop, typeof(MyAttribute)));

Pendekatan ini memudahkan atribut proses menyemak dengan menggunakan Attribute.IsDefined secara langsung untuk setiap sifat, yang mengesahkan kewujudan atribut yang diingini dengan cekap tanpa membuat seketika ia. Ini meningkatkan prestasi dengan ketara, terutamanya untuk jenis yang mempunyai sejumlah besar sifat.

Selain itu, pembolehubah prop yang terhasil ialah IEnumerable objek PropertyInfo, membolehkan penapisan atau manipulasi selanjutnya mengikut keperluan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Sifat C# yang Dihiasi dengan Atribut Khusus (AllowMultiple = palsu) dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn