3

我有一些这样的代码:

    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 

或者

GetType(T)

我只得到 System.RuntimeType 或 System.Type。我该如何解决这个问题?

升级版:

为了更清楚地理解我想要什么......也在方法 ReStoreFromXML 我有这样的代码:

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

如何使用参数 MyCustomType 创建 mySerializer?

4

2 回答 2

3

我以这种方式调用我的函数 viewsList = ReStoreFromXML(GetType(MyCustomType), XMLpath)

那是你的问题。如果您调用ReStoreFromXML(GetType(string), ...)T则将是 Type/RuntimeType。如果你打电话ReStoreFromXML("somestring", ...)T就会string

所以只需删除第一个参数,因为您已经通过调用GetType(T).

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)
于 2013-08-29T09:39:09.340 回答
1

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

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

ReStoreFromXML(Of String)("somestring", xmlPath)

其中“somestring”仅用于检查它是否确实是一个字符串,这已经在(Of String)部分中说明了。

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

Private Shared Function ReStoreFromXML(Of T)(ByVal XMLpath As String) As List(Of T)
    If Not TypeSupported(T) Then Return Nothing
    ...
End Function
于 2013-08-29T09:37:45.797 回答