2008-11-19 15 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