2013-09-21 144 views
2

我新來的LINQ的語法,卻得到了錯誤的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; 

任何想法以下行?謝謝

+0

你的代碼工作得很好。你確定這是導致問題的線路嗎? – MarcinJuraszek

+0

我工作的一些別的代碼,當我建立在.net framework 4.0它建立好,但不建立在3.5,我得到上述錯誤 – rumi

+0

好吧,我看到問題在哪裏。 'IEnumerable '在.NET 3.5中不是協變的 – MarcinJuraszek

回答

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; 
相關問題