2008-11-19 37 views
1

我有一個SomeClass類,它可以從其構造函數中的數據行填充自身。這個類實現IInterface。然而,當我執行下面的代碼:LINQ查詢中從具體類轉換爲接口時的異常

Dim fpQuery As IEnumerable(Of IInterface) = _ 
    From dr As DataRow In DataLayer.SomeMethodToGetADataTable.AsEnumerable _ 
    Select New SomeClass(dr) 

我得到

Unable to cast object of type 
'System.Data.EnumerableRowCollection`1[Classes.SomeClass]' 
to type 
'System.Collections.Generic.IEnumerable`1[Interfaces.IInterface]' 

我也許應該補充的是,下面的代碼工作正常的錯誤。

Dim fpQuery As IEnumerable(Of SomeClass) = _ 
    From dr As DataRow In DataLayer.SomeMethodToGetADataTable.AsEnumerable _ 
    Select New SomeClass(dr) 

一樣簡單投

Dim myInterface As IInterface = New SomeClass(myDataRow) 

任何想法?編輯: 喬恩Skeet得到它的發現。我使用下面的代碼,它完美地工作。

Dim fpQuery2 As IEnumerable(Of IInterface) = fpQuery.Cast(Of IInterface) 

回答

5

您正遇到泛型缺乏方差。舉個簡單的例子,你不能把IEnumerable(Of String)當作IEnumerable(Of Object)

最簡單的事情可能是增加一個電話到Cast(Of TResult)

+0

非常感謝 - 這正是我一直在尋找的。 – 2008-11-19 14:53:15