一个类型转换的问题,希望可以用范型解决~~~
下面是把一个字符串根据一定的分隔符分割成一个single数组的例子,能不能用范型做成分割成任意数组(如integer,double,date之类的),我试了几次都说T类型无法换成其它类型,该怎样写才行呢?
Public Shared Function ConvertToSingle(ByVal input As String) As Single
Return CSng(input)
End Function
Private Shared Function GetList(ByVal strList As String, ByVal separator As String) As Single()
Dim pList() As String = strList.Split(separator)
Dim result As Single() = Array.ConvertAll(pList, New Converter(Of String, Single)(AddressOf ConvertToSingle))
Return result
End Function
[解决办法]
Public Shared Function ConvertToSingle(Of T)(ByVal input As String) As T
'Return CSng(input)
End Function
Private Shared Function GetList(Of T)(ByVal strList As String, ByVal separator As String) As T()
Dim pList() As String = strList.Split(separator)
Dim result As T() = Array.ConvertAll(pList, New Converter(Of String, T)(AddressOf ConvertToSingle))
Return result
End Function
注释了一句,那句我不知道如何写。我只能写到这里了。万能转换估计很难写好。
[解决办法]
大概的写了一下,说实话,也不太清楚泛型是不是这样用,第一次写,呵呵,见笑了:
Imports System.Collections.Generic
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim cc As New MyType(Of Double)
Dim dd As Double()
'dd的数据类型必须符合cc的泛型类型
dd = cc.GetNewList( "123.123,234,345,456 ", ", ")
For Each ee As Double In dd
Console.WriteLine(ee)
Next
End Sub
End Class
Public Class MyType(Of T)
Private Function ConvertTo(ByVal input As String) As T
Return CType(DirectCast(input, Object), T)
End Function
Public Function GetNewList(ByVal strList As String, ByVal separator As String) As T()
Dim pList() As String = strList.Split(separator)
Dim result As T() = Array.ConvertAll(pList, New Converter(Of String, T)(AddressOf ConvertTo))
Return result
End Function
End Class