2

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

有任何想法吗?谢谢

4

1 回答 1

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;
于 2013-09-21T21:38:16.063 回答