1

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

List<?>

我已经有一个解决方法我只是很惊讶我找不到与带有通配符的“原始”通用列表的变量类型的 vb.net 等效项。这里的 Java 机制使您能够引用列表,而不管 T 是什么。Java 甚至可以让您走得更远并执行以下操作:

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

我试过了:

List(Of )

那没有用。这似乎只适用于 GetType 函数。

4

4 回答 4

4

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

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

于 2012-05-17T15:15:07.740 回答
3

你在谈论

List(of T)
List(of String)

等等

于 2012-05-17T15:14:50.650 回答
1

请参阅MSDN 上的 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
于 2012-05-17T15:17:22.930 回答
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(Of any) 分配给 pCollection,我可以通过调用代码来做到这一点:

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

而在我刚刚拥有 Collection As IList 之前,我无法访问 MyNeatoCollectionMethod

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

于 2012-05-18T13:15:36.543 回答