使用自訂屬性來擷取屬性:一種有效的方法
在.NET 中使用反射時,通常需要內省類型及其成員存取特定資訊。常見場景涉及取得標有特定自訂屬性的屬性清單。此任務可以使用 GetCustomAttributes() 方法來完成,但有更有效率、更簡潔的方法。
考慮以下程式碼片段,其旨在使用 MyAttribute 屬性檢索屬性:
foreach (PropertyInfo prop in t.GetProperties()) { object[] attributes = prop.GetCustomAttributes(typeof(MyAttribute), true); if (attributes.Length == 1) { //Property with my custom attribute } }
雖然這種方法可以正確運行,但它會遭受不必要的物件實例化。 GetCustomAttributes() 方法傳回一個屬性實例數組,這需要額外的記憶體分配和開銷。
要最佳化此程式碼,我們可以利用Where() 方法和Attribute.IsDefined() 方法,如下所示下面:
var props = t.GetProperties().Where( prop => Attribute.IsDefined(prop, typeof(MyAttribute)));
此修改後的程式碼片段透過使用Attribute. IsDefined() 驗證屬性是否存在而無需實例化屬性對象,從而顯著提高了效率。 Where() 方法過濾屬性集合,僅傳回滿足指定謂詞的屬性。
這種方法不僅簡化了程式碼,還透過避免不必要的物件建立來最大限度地減少記憶體消耗。它為檢索標有自訂屬性的屬性提供了更有效率、更優雅的解決方案。
以上是如何在 .NET 中高效檢索具有自訂屬性的屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!