获取程序集中的所有属性类型(反射)
Get all attributes type in assembly (reflection)
我正在尝试获取程序集中存在的特定类型的所有属性。在我的具体情况下,我在 Controller 上有属性,在 Actions (MVC) 上有其他属性。使用这段代码我可以得到我想要的,但我很确定有一种方法可以避免 union
var assemblyTypes = Assembly.GetExecutingAssembly().GetTypes();
var myAttributes = assemblyTypes
.SelectMany(x => x.GetCustomAttributes<MyAttribute>()).ToList();
myAttributes = myAttributes.Union(assemblyTypes
.SelectMany(x => x.GetMethods())
.SelectMany(x => x.GetCustomAttributes<MyAttribute>())).ToList();
myAttributes = myAttributes.Distinct().ToList();
我们没有任何将父类型及其成员放在一起的反射方法,因此最好的解决方案是使用 Append
模拟该行为,如下所示:
var assemblyTypes = Assembly.GetExecutingAssembly().GetTypes();
var myAttributes = assemblyTypes
.SelectMany(x => x.GetMethods().Cast<MemberInfo>().Append(x))
.SelectMany(x => x.GetCustomAttributes<MyAttribute>())
.Distinct().ToList();
我正在尝试获取程序集中存在的特定类型的所有属性。在我的具体情况下,我在 Controller 上有属性,在 Actions (MVC) 上有其他属性。使用这段代码我可以得到我想要的,但我很确定有一种方法可以避免 union
var assemblyTypes = Assembly.GetExecutingAssembly().GetTypes();
var myAttributes = assemblyTypes
.SelectMany(x => x.GetCustomAttributes<MyAttribute>()).ToList();
myAttributes = myAttributes.Union(assemblyTypes
.SelectMany(x => x.GetMethods())
.SelectMany(x => x.GetCustomAttributes<MyAttribute>())).ToList();
myAttributes = myAttributes.Distinct().ToList();
我们没有任何将父类型及其成员放在一起的反射方法,因此最好的解决方案是使用 Append
模拟该行为,如下所示:
var assemblyTypes = Assembly.GetExecutingAssembly().GetTypes();
var myAttributes = assemblyTypes
.SelectMany(x => x.GetMethods().Cast<MemberInfo>().Append(x))
.SelectMany(x => x.GetCustomAttributes<MyAttribute>())
.Distinct().ToList();