在Java中,VB.NET与List的等价物是什么

在Java中,VB.NET与List的等价物是什么,vb.net,generics,Vb.net,Generics,我在这里严格地寻找语言转换: List<?> 但这并没有起作用。这似乎只在GetType函数中起作用。您是说 List(of T) List(of String) 等等。你在说什么 List(of T) List(of String) 等等。这些不是C泛型声明,它们是Java声明,因此在VB.NET中没有等价物 正如Konrad在上面的评论中所说,Java和C具有完全不同的通用实现。C通过扩展工作,Java通过擦除工作。因此,在C中没有可用的原始泛型类型。这些不是C泛型声明,它

我在这里严格地寻找语言转换:

List<?>
但这并没有起作用。这似乎只在GetType函数中起作用。

您是说

List(of T)
List(of String)
等等。

你在说什么

List(of T)
List(of String)

等等。

这些不是C泛型声明,它们是Java声明,因此在VB.NET中没有等价物


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

这些不是C泛型声明,它们是Java声明,因此在VB.NET中没有等价物

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

请参见MSDN上的。您要查找的是类型约束。您必须将其与执行所需限制的方法或类的声明结合起来

要接受任何类型,您可以执行以下操作:

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
或将其限制为值类型,例如,可以执行以下操作:

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
请参阅MSDN上的。您要查找的是类型约束。您必须将其与执行所需限制的方法或类的声明结合起来

要接受任何类型,您可以执行以下操作:

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
或将其限制为值类型,例如,可以执行以下操作:

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

好的,我的目标是能够在MyBaseClass上有一个指向它的集合的集合属性,它的类型是MyCollectionOf T,其中T是MyBaseClass的一种类型。基类不知道它的子类是什么。因此,它需要分配MyCollection的任何实现,并获得早期绑定和intellisense

我需要有我的蛋糕,吃它太早装订和晚装订

以下是我在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 
而之前我只是将集合作为IList,这并没有让我访问MyNeatoCollectionMethod


塔达!感谢所有回答的人。

好的,我的目标是能够在MyBaseClass上拥有一个指向其集合的集合属性,它是MyCollectionOf T类型,其中T是MyBaseClass的一种类型。基类不知道它的子类是什么。因此,它需要分配MyCollection的任何实现,并获得早期绑定和intellisense

我需要有我的蛋糕,吃它太早装订和晚装订

以下是我在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 
而之前我只是将集合作为IList,这并没有让我访问MyNeatoCollectionMethod



塔达!感谢所有回答的人。

试试看我上次看的MSDN C没有通配符-你是说Java吗?我不知道你在问什么,没有什么特别的?在c或VB中放置支架。不,对。我刚发现这是来自Java,不是C。我的错。我更新了我的?为了反映这一点,试着看看我上次看的MSDN C没有通配符——你是说Java吗?我不知道你在问什么,没有什么特别的?在c或VB中放置支架。不,对。我刚发现这是来自Java,不是C。我的错。我更新了我的?不,因为我在声明此类型时不在泛型类中。我只需要一个原始泛型类型的变量。如果我将Listof T放在其中,它将不会编译。@toddmo.NET没有泛型类型擦除的概念,因此没有原始泛型类型。不,因为我在声明此类型时不在泛型类内。我只需要一个原始泛型类型的变量。如果我将Listof T放在其中,它将不会编译。@toddmo.NET没有泛型类型擦除的概念,因此没有原始泛型类型。确定。菲伊。难怪我找不到它。我想在下一个版本中有一些值得期待的东西吧!谢谢@toddmo不,它不会出现在下一个版本中。ECMA规范有一个明确的条款阻止这样做。这是C中泛型方法的核心部分!我必须将我的变量声明为IList。对于类型安全和智能感知来说,这似乎不是最理想的。哦,好吧…@toddmo-这不是一个等价物,而是IList扩展的一个非通用的基本接口。你自己已经有效地删除了类型;好啊菲伊。难怪我找不到它。我想在下一个版本中有一些值得期待的东西吧!谢谢@toddmo不,它不会出现在下一个版本中。ECMA规范有一个明确的条款阻止这样做。这是C中泛型方法的核心部分!我必须将我的变量声明为IList。对于类型安全和智能感知来说,这似乎不是最理想的。哦,好吧…@toddmo
-这不是等价的,而是IList扩展的非通用基本接口。你自己已经有效地删除了类型;好主意。我尝试过:Dim MyListVar作为MyListOf T作为MyBaseObject,但没有编译。Intellisense在t之后没有给出As关键字。好的,我们越来越近了!我的引用实际上是一个属性。我同意这一点,因为这个属性必须有一个参数。有没有一种方法可以如此声明一个属性?有趣的想法。我尝试过:Dim MyListVar作为MyListOf T作为MyBaseObject,但没有编译。Intellisense在t之后没有给出As关键字。好的,我们越来越近了!我的引用实际上是一个属性。我同意这一点,因为这个属性必须有一个参数。有没有办法这样申报财产?