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

10-14 16:01
查看更多