我是Linq语法的新手并且收到错误
“无法隐式转换类型'
System.Collections.Generic.IEnumerable<System.Reflection.MethodInfo
&gt;'到'System.Collections.Generic.IEnumerable<System.Reflection.MethodBase
&gt;'。存在显式转换(您是否错过了演员?)“
在我的申请中的以下一行
IEnumerable<MethodBase> methods =
from p in defaultMembers.OfType<PropertyInfo>()
select p.GetGetMethod() into m
where m != null
select m;
有什么想法吗?感谢
答案 0 :(得分:4)
问题是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;