VB.NET类型未知的泛型变量

VB.NET类型未知的泛型变量,.net,vb.net,generics,.net,Vb.net,Generics,在其中一个方法中,我需要未指定泛型类型的变量Public Class SWTTFieldOf dataType,该变量只有在知道dataType的类型时才会被实例化。但是,我不能将变量Dim f创建为SWTTField,因为它给了我一个错误,即数据类型的SWTTFieldOf的几个类型参数。如何延迟指定泛型变量的类型,但仍然有一个变量 要做到这一点,还需要使使用它的类成为泛型类。例如,假设您有一个使用泛型列表的类,如下所示: Public Class Registry Private _

在其中一个方法中,我需要未指定泛型类型的变量Public Class SWTTFieldOf dataType,该变量只有在知道dataType的类型时才会被实例化。但是,我不能将变量Dim f创建为SWTTField,因为它给了我一个错误,即数据类型的SWTTFieldOf的几个类型参数。如何延迟指定泛型变量的类型,但仍然有一个变量

要做到这一点,还需要使使用它的类成为泛型类。例如,假设您有一个使用泛型列表的类,如下所示:

Public Class Registry
    Private _items As New List(Of Object)()

    Public Sub Register(item As Object)
         _items.Add(item)
    End Sub
End Class
Public Class Registry(Of T)
    Private _items As New List(Of T)()

    Public Sub Register(item As T)
         _items.Add(item)
    End Sub
End Class
但你不想让它成为一个对象列表。相反,你想让它成为一个列表?其中可能是某个特定类型的列表,但您希望稍后在其他地方指定该类型。在这种情况下,您只需要将外部类也设置为泛型,如下所示:

Public Class Registry
    Private _items As New List(Of Object)()

    Public Sub Register(item As Object)
         _items.Add(item)
    End Sub
End Class
Public Class Registry(Of T)
    Private _items As New List(Of T)()

    Public Sub Register(item As T)
         _items.Add(item)
    End Sub
End Class
然后,当您使用Registry类时,您将被迫指定它注册的项的类型:

Dim x As New Registry(Of User)()

为了做到这一点,您还需要使使用它的类成为泛型的。例如,假设您有一个使用泛型列表的类,如下所示:

Public Class Registry
    Private _items As New List(Of Object)()

    Public Sub Register(item As Object)
         _items.Add(item)
    End Sub
End Class
Public Class Registry(Of T)
    Private _items As New List(Of T)()

    Public Sub Register(item As T)
         _items.Add(item)
    End Sub
End Class
但你不想让它成为一个对象列表。相反,你想让它成为一个列表?其中可能是某个特定类型的列表,但您希望稍后在其他地方指定该类型。在这种情况下,您只需要将外部类也设置为泛型,如下所示:

Public Class Registry
    Private _items As New List(Of Object)()

    Public Sub Register(item As Object)
         _items.Add(item)
    End Sub
End Class
Public Class Registry(Of T)
    Private _items As New List(Of T)()

    Public Sub Register(item As T)
         _items.Add(item)
    End Sub
End Class
然后,当您使用Registry类时,您将被迫指定它注册的项的类型:

Dim x As New Registry(Of User)()

一个选项是使用接口。将Dim f设置为ISWTTField,然后将其初始化为f=新的SWTTFieldOfSomething@the_lotus接口也有同样的问题,我必须创建一个泛型接口,该接口具有返回泛型类型的属性。当创建接口类型的变量时,我还需要指定类型。如果您无法更新现有类以使用接口或从一个基类派生。然后使用对象类型并将其转换为您了解的类型later@Fabio. 这是我现在正在做的事情,我试图摆脱它,因为该字段将经常被访问,并且需要转换为适当的类型。将Dim f设置为ISWTTField,然后将其初始化为f=新的SWTTFieldOfSomething@the_lotus接口也有同样的问题,我必须创建一个泛型接口,该接口具有返回泛型类型的属性。当创建接口类型的变量时,我还需要指定类型。如果您无法更新现有类以使用接口或从一个基类派生。然后使用对象类型并将其转换为您了解的类型later@Fabio. 这是我现在正在做的事情,我试图摆脱它,因为这个字段经常被访问,需要转换成适当的类型。我明白你的意思,但我真的不能回去把50个左右的类改成泛型类,而且我也没有访问某些类的权限。如果没有关于您具体问题的更多细节,很难提供任何其他想法。我明白您的意思,但我真的不能回到过去,把50个左右的类改成泛型类,而且我也无法访问某些类。如果没有关于您具体问题的更多细节,很难提供任何其他想法。