gpt4 book ai didi

.net - 如何将对象列表转换为对象在 VB.net 中实现的接口(interface)列表?

转载 作者:行者123 更新时间:2023-12-04 13:45:41 24 4
gpt4 key购买 nike

我在 VB.net 中工作,并且有一个类 Foo,它实现了一个接口(interface) IBar。我有一个 Foo 的列表,但我需要将一个 IBar 的列表传递给一个函数,但我不断收到转换错误,即使我使用 DirectCast。我的代码是

Class Foo
Implements IBar
End Class

Interface IBar
End Interface

Sub DoIt(ByVal l As List(Of IBar))
End Sub

Sub Main()
Dim FooList As New List(Of Foo)
DoIt(FooList)
End Sub

Sub Main2()
Dim FooList As New List(Of Foo)
DoIt(DirectCast(FooList, List(Of IBar)))
End Sub

Sub MainWorks()
Dim FooList As New List(Of Foo)
Dim IBarList As New List(Of IBar)

For Each f As Foo In FooList
IBarList.Add(f)
Next

DoIt(DirectCast(IBarList, List(Of IBar)))
DoIt(IBarList)
End Sub

在 Main 和 Main2 我得到
Value of type 'System.Collections.Generic.List(Of FreezePod.Pod.Foo)' cannot be converted to 'System.Collections.Generic.List(Of FreezePod.Pod.IBar)'.

MainWorks 可以工作,但是在我想调用此函数的任何地方都必须这样做会非常烦人且效率低下。

最佳答案

问题是像 List(Of T) 这样的泛型类型不会转换为其他一些 List(Of U) ,即使转换保证是安全的。 VS2010 中会为此提供帮助,当然现在它并不能真正帮助您。

正如我认为在链接到的线程中也建议的那样,如果 DoIt 可以采用 IBar 的 IEnumerable 而不是列表,您可以这样做:

DoIt(FooList.Cast(Of IBar))

或者如果你真的需要一个列表(并且可以承担开销),你可以得到一个列表:
DoIt(FooList.Cast(Of IBar).ToList)

关于.net - 如何将对象列表转换为对象在 VB.net 中实现的接口(interface)列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/885302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com