Vb.net 如何获得正确的T型

Vb.net 如何获得正确的T型,vb.net,reflection,Vb.net,Reflection,我有一些这样的代码: Private Shared Function ReStoreFromXML(Of T)(ByVal TargetType As T, ByVal XMLpath As String) As List(Of T) If Not TypeSupported(TargetType) Then Return Nothing .... Return CType(mySerializer.Deserialize(fstream), List(

我有一些这样的代码:

    Private Shared Function ReStoreFromXML(Of T)(ByVal TargetType As T, ByVal XMLpath As String) As List(Of T)

        If Not TypeSupported(TargetType) Then Return Nothing
....
        Return CType(mySerializer.Deserialize(fstream), List(Of T))
例如,TargetType是MyCustomType

TypeSupported应检查TargetType是否正常。当我尝试像

TargetType.GetType 

我只得到System.RuntimeType或System.Type。如何解决此问题

UPD:

为了更清楚地了解我想要什么。。。在方法ReStoreFromXML中,我还有这样的代码:

 Dim mySerializer As XmlSerializer
 mySerializer = New XmlSerializer(GetType(T)) 

如何使用参数MyCustomType创建mySerializer?

类型应该是函数的类型参数,而不是该类型的参数。(是的,令人困惑)

这样,您将两次声明类型,因此合理的调用将是:

ReStoreFromXML(Of String)("somestring", xmlPath)
其中“somestring”仅用于检查它是否确实是字符串,这已在
(字符串)
部分中说明

您应该将方法的签名更改为:

Private Shared Function ReStoreFromXML(Of T)(ByVal XMLpath As String) As List(Of T)
    If Not TypeSupported(T) Then Return Nothing
    ...
End Function
我调用函数的方式是viewsList=ReStoreFromXML(GetType(MyCustomType),XMLpath)

那是你的问题。如果调用
ReStoreFromXML(GetType(string),…)
,那么
T
将是Type/RuntimeType。如果调用
ReStoreFromXML(“somestring”,…)
T
将是
string

所以只需删除第一个参数,因为它是不必要的,因为您已经通过调用
GetType(T)
知道了类型


如何调用
ReStoreFromXML
函数?是否将
类型
实例作为第一个参数传入?如果是这样,那将使
T
Type
,而不是您要传递的类型。@hvd这就是问题所在。如果调用
ReStoreFromXML(GetType(string),…)
,那么
T
将是Type/RuntimeType。如果你调用
ReStoreFromXML(“somestring”,…)
T
将是
string。
@Dominic Kexel thnx,你的评论给了我正确的方式)这不完全是我想要的。我需要ReStoreFromXML与某些类型一起工作,而不仅仅是MyCustomType。我将使我的代码以这种方式工作:viewsList=ReStoreFromXML(新的MyCustomType,XMLpath),我看不出有问题
ReStoreFromXML
仍然是通用的,所以可以调用
ReStoreFromXML(无论您的类型是什么)(XMLpath)
。哦,现在我明白了。太多了!
Private Shared Function ReStoreFromXML(Of T)(ByVal XMLpath As String) As List(Of T)
    If Not TypeSupported(T) Then Return Nothing
    ...
End Function
Private Shared Function ReStoreFromXML(Of T)(XMLpath As String) As List(Of T)
    Dim mySerializer = New XmlSerializer(GetType(T)) 
    ...
End Function

ReStoreFromXML(Of MyCustomType)(XMLpath)