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;
有什么想法吗?谢谢
问题是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;