使用自定义属性检索属性:一种有效的方法
在 .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中文网其他相关文章!