是否有可能取代这两个功能
函数f1(S作为字符串)作为1级()
暗淡了()作为字符串=斯普利特(S)
昏暗B(UBound函数(一))作为1级
对于我作为整数= 0 UBound函数(一)
B(1)=新的Class1(一个(i))的
下一个
F1 = B
端功能
和
函数f2(S作为字符串)作为Class2的()
暗淡了()作为字符串=斯普利特(S)
昏暗B(UBound函数(一))作为Class2的
对于我作为整数= 0 UBound函数(一)
B(1)=新Class2的(一个(i))的
下一个
F2 = B
端功能
与泛型函数类似
功能fGeneric(S作为字符串,T为类型)为T()
暗淡了()作为字符串=斯普利特(S)
昏暗B(UBound函数(一))为T
对于我作为整数= 0 UBound函数(一)
B(1)=新T(一个(i))的
下一个
fGeneric = B
端功能
解决方案:
类class1
私人_Name作为字符串
公共只读属性名称作为字符串
得到
NAME = _Name
最终获取
高端物业
亚新(S作为字符串)
_Name = S
结束小组
末级
功能fGeneric(Of T)中(S作为字符串)为IEnumerable(Of T)已
暗淡了()作为字符串=斯普利特(S)
昏暗B(UBound函数(一))为T
对于我作为整数= 0 UBound函数(一)
B(1)=的GetType(T).InvokeMember(_
没什么,_
BindingFlags.DeclaredOnly或_
BindingFlags.Public或_
BindingFlags.NonPublic可或_
BindingFlags.Instance或_
BindingFlags.CreateInstance,_
没什么,_
没什么,_
新的对象(){A(I)} _
)
下一个
fGeneric = B
端功能
的Response.Write(fGeneric(Class 1的)(ABC)(1).Name点)
输出 B
功能fGeneric(Of T)中(BYVAL参考译文字符串,BYVAL createT作为Func键(串,T))作为的IEnumerable(Of T)中
返回斯普利特(S)。选择(功能(一)createT(一))
端功能
这样称呼它
fGeneric(共1类)(一些字符串值,函数()返回新的1级(A))
Is it possible to replace these two functions
Function f1 (s As String) As class1()
Dim a() As String = Split(s)
Dim b(UBound(a)) As class1
For i As Integer = 0 To UBound(a)
b(i) = New class1(a(i))
Next
f1 = b
End Function
and
Function f2 (s As String) As class2()
Dim a() As String = Split(s)
Dim b(UBound(a)) As class2
For i As Integer = 0 To UBound(a)
b(i) = New class2(a(i))
Next
f2 = b
End Function
with a generic function something like
Function fGeneric (s As String,T As Type) As T()
Dim a() As String = Split(s)
Dim b(UBound(a)) As T
For i As Integer = 0 To UBound(a)
b(i) = New T(a(i))
Next
fGeneric = b
End Function
?
SOLUTION
Class class1
Private _Name As String
Public ReadOnly Property Name As String
Get
Name = _Name
End Get
End Property
Sub New(s As String)
_Name = s
End Sub
End Class
Function fGeneric(Of T) (s As String) As IEnumerable(Of T)
Dim a() As String = Split(s)
Dim b(UBound(a)) As T
For i As Integer = 0 To UBound(a)
b(i) = GetType(T).InvokeMember( _
Nothing, _
BindingFlags.DeclaredOnly Or _
BindingFlags.Public Or _
BindingFlags.NonPublic Or _
BindingFlags.Instance Or _
BindingFlags.CreateInstance, _
Nothing, _
Nothing, _
New Object(){a(i)} _
)
Next
fGeneric = b
End Function
Response.Write(fGeneric(Of class1)("a b c")(1).Name)
outputs b
Function fGeneric(Of T) (ByVal s As String, ByVal createT As Func(Of String, T)) As IEnumerable(Of T)
Return Split(s).Select(Function(a) createT(a))
End Function
call it like this
fGeneric(Of class1)("some, string, value", Function(a) Return New class1(a))