在问this previous question时,我得到了一个我知道答案是正确的答案,但我仍然(有点)没有线索如何实现它......
假设我有以下代码:
Public Class BaseClass
...
End Class
Public Class DerivedClass
Inherits BaseClass
... Extra Fields, methods, etc ...
End Class
然后,在另一个过程中,我定义了以下函数:
Public Function DoSomething(i as Integer, s as String, b as Boolean) As List(Of BaseClass)
...
End Function
我正在使用它来尝试并在我的程序中返回List(Of BaseClass)
和List(Of DerivedClass)
,但不知道怎么做 - 尽管如此,现在我非常肯定(感谢the answer to my previous question)它将涉及委托函数调用。
有人可以告诉我代码的样子吗?
此外,尽管我对VB.Net更为熟悉,但我对C#的了解非常好,无法进行转换,因此任何一种解决方案都会非常有意义。
谢谢!
修改
根据@Servy在下面的回答中提供的反馈,我知道这不是关于创建委托功能,而是关于从我的函数返回IEnumerable(OF BaseClass)
而不是List(Of BaseClass)
。所以,我改变了它,但它还没有工作......
我现在明白了为什么,但不知道该怎么办......
当前代码:
Public Function DoSomething(i as Integer, s as String, b as Boolean) As IEnumerable(Of BaseClass)
Dim RetVal as New List(Of BaseClass)
Dim ToAdd as BaseClass
... some code ...
... loop
Retval.Add(ToAdd)
...
Return RetVal
End Function
现在,我无法将代码中的RetVal
更改为IEnumerable
,因为此时不允许Add
。
我如何做我在这里尝试做的事情?
谢谢!!!
答案 0 :(得分:0)
类型List<T>
与T
不一致,所以你想要的是不可能的。要利用协方差,您需要使用支持协方差的类型,例如IEnumerable<T>
。
虽然代表们可以自己利用协方差,但他们仍然需要有问题的类型来支持它。他们不会做任何事情让你将List<T>
视为协变。