1

我有一个类 SomeClass,它可以从它的构造函数中的数据行中填充自己。此类实现 IInterface。但是,当我执行下面的代码时:

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)

有任何想法吗?

编辑:乔恩·斯基特(Jon Skeet)明白了。我使用了以下代码,它运行良好。

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

1 回答 1

5

您遇到了泛型缺乏变化。把它放在一个更简单的例子中,你不能把它IEnumerable(Of String)当作IEnumerable(Of Object).

最简单的事情可能是添加对Cast(Of TResult)的调用。

于 2008-11-19T14:33:55.250 回答