我有一些像这样的代码:
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。我该如何解决这个问题?
UPD:
为了更清楚地理解我想要的东西......同样在方法ReStoreFromXML中我有这样的代码:
Dim mySerializer As XmlSerializer
mySerializer = New XmlSerializer(GetType(T))
如何使用参数MyCustomType创建mySerializer?
答案 0 :(得分: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)
答案 1 :(得分: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