Linq无法隐式转换类型

时间:2013-09-21 21:26:07

标签: c# asp.net linq

我是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;

有什么想法吗?感谢

1 个答案:

答案 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;