使用反射來尋找具有特定屬性的屬性
自訂屬性是在 .NET 程式碼中註解類型和成員的強大工具。有時有必要以程式設計方式檢索有關這些屬性的資訊。此問題重點在於檢索由名為 MyAttribute 的特定自訂屬性賦予的公共屬性列表,該屬性的 AllowMultiple 屬性設定為 false。
提供的程式碼使用循環來迭代該類型的屬性並使用 GetCustomAttributes() 檢查自訂屬性是否存在。雖然這種方法很實用,但它涉及具體化屬性實例,這會帶來效能成本。
更有效的方法是在GetProperties() 集合上使用Where() 擴充方法,如給定所示答案:
var props = t.GetProperties().Where( prop => Attribute.IsDefined(prop, typeof(MyAttribute)));
此程式碼利用Attribute.IsDefined() 方法,該方法檢查成員上是否存在特定屬性類型,而不建立任何屬性實例。 lambda 表達式確保只有具有 MyAttribute 的屬性才會被選取到 props 變數中。
利用此方法可以避免與具體化屬性實例相關的開銷,從而獲得更輕量級和高效能的解決方案。
以上是如何在 C# 中有效率地尋找具有特定自訂屬性的公共屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!