VB.NET:如何处理变量类型(参数及放大器;返回值)? [英] VB.NET: How to handle variable type (parameter & return value)?

查看:452
本文介绍了VB.NET:如何处理变量类型(参数及放大器;返回值)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有可能取代这两个功能

 函数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))

这篇关于VB.NET:如何处理变量类型(参数及放大器;返回值)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆