我是Linq语法的新手,但出现错误
“无法将类型'>'隐式转换为'>'。存在显式转换(是否缺少转换?)”
在我的应用程序的以下行中
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;
关于c# - Linq无法隐式转换类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18937804/