这段代码中反射的输出类型是什么

时间:2019-04-22 12:31:11

标签: c# reflection

我有以下方法:

public static class ReflectionHelper
{
    public static List<?> FindType<T>()
    {
        var A =
            from Assemblies in AppDomain.CurrentDomain.GetAssemblies().AsParallel()
            from Types in Assemblies.GetTypes()
            let Attributes = Types.GetCustomAttributes(typeof(T), true)
            where Attributes?.Length > 0
            select new { Type = Types };

        var L = A.ToList();

        return L;
    }
}

列表的类型是什么?

如果我这样做:

foreach (var l in L) { ... }

它可以找到并且可以浏览类型,但是我正在使用的(Rider)开发环境不会提供类型。

1 个答案:

答案 0 :(得分:1)

这是具有单个属性的匿名对象

IEnumerable<Type> Types;

因此,使用A.ToList()将为您提供匿名对象的列表,您将无法返回该列表。

我认为您不想使用select new { Type = Types };,而是想使用select Types;

所以:

public static List<Type> FindType<T>()
{
    var types =
        from ssembly in AppDomain.CurrentDomain.GetAssemblies().AsParallel()
        from type in ssembly.GetTypes()
        let attributes = type.GetCustomAttributes(typeof(T), true)
        where attributes?.Length > 0
        select type;

    return types.ToList();
}