获取程序集中的所有属性类型(反射)

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();