我有以下代码从类型为类的程序集中获取类型集合:
Assembly assembly = Assembly.LoadFile(DLLFile);
var types = assembly.GetTypes().AsEnumerable().Where(x => x.IsClass);
这可以正常工作并且符合预期。但是,我想将 lambda 表达式提取到 Linq 表达式变量中(稍后将在此方法的参数中使用它)。所以我做了以下事情:
private Expression<Func<Type, bool>> _standardFilter = (x => x.IsClass);
Assembly assembly = Assembly.LoadFile(DLLFile);
var types = assembly.GetTypes().AsEnumerable().Where(_standardFilter);
但是,这不会与错误一起编译:
System.Collections.Generic.IEnumerable<System.Type>' does not contain a
definition for 'Where' and the best extension method overload
'System.Linq.Enumerable.Where<TSource>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,int,bool>)' has some invalid arguments
我知道我的表达式不符合 predicate System.Func<TSource,int,bool>
,但是该Where
函数有一个重载,它需要一个 predicate System.Func<TSource,bool>
,据我所知,它应该可以工作。
我已经尝试assembly.GetTypes()
以多种方式将(这是一个数组)的结果转换为一个列表,而没有帮助解决这个问题。
我还确保我已经获得了using
该课程的所有正确陈述,因为这似乎是几个人在我的谷歌搜索过程中遇到的问题。
过去,我设法在IQueryable
集合上使用了相同的技术,但我不明白为什么当集合Where
上的函数可用IEnumerable
并且应该接受我提供的谓词时这不起作用。
非常感谢您的帮助。