什么是Java中的List <! - ? - >的VB.NET等价物

时间:2012-05-17 15:13:00

标签: vb.net generics

我在这里严格要求语言转换:

List<?>

我已经有了解决方法我很惊讶我找不到vb.net相当于一个带有外卡的“原始”通用列表的变量类型。 Java的机制使您可以引用列表而不管T是什么。 Java甚至可以让您更进一步,例如:

List<? extends Number>
List<? super Double>

我试过了:

List(Of )

这不起作用。这似乎只适用于GetType函数。

4 个答案:

答案 0 :(得分:4)

那些不是C#泛型声明,它们是Java声明,因此在VB.NET中没有等效声明。

正如Konrad在上面的评论中所述,Java和C#具有完全不同的通用实现。 C#通过扩展工作,Java通过擦除工作。因此在C#中没有“原始”泛型类型可用。

答案 1 :(得分:3)

你在谈论

List(of T)
List(of String)

答案 2 :(得分:1)

请参阅MSDN上的Generic Types in Visual Basic (Visual Basic)。您正在寻找的是一种类型约束。您必须将其与对执行所需限制的方法或类的声明相结合。

接受您可以执行的任何类型:

Public Sub testSub(Of t)(arg As List(Of t))
    'Do something.
End Sub

或者,例如,要将其限制为值类型,您可以执行以下操作:

Public Sub testSub(Of t As Structure)(arg As List(Of t))
    'Do something.
End Sub

您正在寻找的是纯粹的通用属性,在.Net Framework中是不允许的。下面的代码不会编译。

Public Property testSub(Of t) As List(Of t)
    Get
    End Get
    Set
    End Set
End Property 

最接近的是:

Public Class testClass(Of T)
    Public Property testSub As List(Of t)
        Get
        End Get
        Set
        End Set
    End Property 
End Class

答案 3 :(得分:0)

好的我的目标是能够在MyBaseClass上有一个Collection属性,指向它的集合,它的类型为MyCollection(Of T),其中T是MyBaseClass的一种类型。基类不知道将它子类化的内容。因此,它需要分配MyCollection的任何实现并获得早期绑定和智能感知。

我需要吃蛋糕并吃它(早期结合和晚期结合)。

这是我在MyBaseClass中所做的:

  Public Event pCollectionChanged(Value As IList)
  Private _pCollection As IList
  <XmlIgnore()> _
  <System.ComponentModel.Browsable(False)> _
  Public Property pCollection As IList
    Get
      Return _pCollection
    End Get
    Set(Value As IList)
      If _pCollection Is Value Then Exit Property
      _pCollection = Value
      RaiseEvent pCollectionChanged(Value)
    End Set
  End Property

  Public Function Collection(Of t As MyBaseClass)() As MyCollection(Of t)
    Return pCollection
  End Function 

现在我可以将一个MyCollection(任何东西)分配给pCollection,我可以通过调用代码来完成:

Dim MyObject As New MyBaseClassSubType    
MyObject.Collection(Of MyBaseClassSubType).MyNeatoCollectionMethod

然而在我刚收到集合作为IList之前,它没有让我访问MyNeatoCollectionMethod

多田!感谢所有回答的人。