Linq 无法隐式转换类型

本文关键字:转换 类型 Linq | 更新日期: 2023-09-27 18:32:12

我是Linq语法的新手,但收到错误

"无法将类型'System.Collections.Generic.IEnumerable<System.Reflection.MethodInfo>'隐式转换为'System.Collections.Generic.IEnumerable<System.Reflection.MethodBase>'。存在显式转换(您是否缺少强制转换?

在我的应用程序中的以下行

 IEnumerable<MethodBase> methods = 
                    from p in defaultMembers.OfType<PropertyInfo>()
                    select p.GetGetMethod() into m
                    where m != null
                    select m;

有什么想法吗?谢谢

Linq 无法隐式转换类型

问题是IEnumerable<T>在 .NET 3.5 中不是协变的(它在 .NET4+)。这就是为什么您无法将IEnumerable<ChildClass>分配给IEnumerable<ParentClass>的原因。

更改变量声明以完全匹配查询结果(使用 var 和隐式类型变量或指定正确的类型):

 IEnumerable<MethodInfo> methods = 
                    from p in defaultMembers.OfType<PropertyInfo>()
                    select p.GetGetMethod() into m
                    where m != null
                    select m;

或者,如果您确实需要IEnumerable<MethodBase>查询中添加其他强制转换:

 IEnumerable<MethodBase> methods = 
                    from p in defaultMembers.OfType<PropertyInfo>()
                    select p.GetGetMethod() into m
                    where m != null
                    select (MethodBase)m;