VB.NET:如何处理变量类型(参数和返回值)?
是否可以替换这两个功能VB.NET:如何处理变量类型(参数和返回值)?,.net,vb.net,.net,Vb.net,是否可以替换这两个功能 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 及 有一个泛型函数,比如 Function fGeneric (s As String,T
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
及
有一个泛型函数,比如
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
?
解决方案
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(属于类别1)(“abc”)(1.Name)
输出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
这样说吧
fGeneric(Of class1)("some, string, value", Function(a) Return New class1(a))
正如@Joel指出的,这可以用linq优雅地解决,但是为了接近@ic3b3rg的问题,语法应该是:
Function fGeneric(Of T As New) (s As String, createT As Func(Of String, T)) As T()
Dim a() As String = Split(s)
Dim b(UBound(a)) As T
For i As Integer = 0 To UBound(a)
b(i) = createT(a(i))
Next
fGeneric = b
End Function
fGeneric(Of class1)("some, string, value", Function(a) Return New class1(a))
编辑
仔细看一看,我认为这是行不通的,因为我们从来没有说过
t
可以用字符串构建。我们只说过T
可以通过new
创建。我不知道怎么解决它。。。欢迎提出任何建议(请随意编辑)。查看。我认为它可以帮助您获得与您的示例更密切相关的结果。I get参数不能传递给用于类型参数的“New”。
onb(I)=New T(a(I))
I get未定义类型“Func”。
在第一行。@ic3b3rg您至少需要.Net 3.5Func
位于系统命名空间中。我将应用程序的池更改为ASP.NET v4.0
,并尝试将服务器.NET版本更改为4.0.30319,但遇到问题。。。首先是在不存在的C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ASP.NET临时文件上出现无写访问错误。。。我创建并添加了权限,但现在我得到无法加载文件或程序集'System.Runtime,Version=4.0.0.0…
。好像我遗漏了什么-想法?好吧,我必须安装.NET4。。。现在我在调用fGeneric时得到了所需的表达式
Function fGeneric(Of T As New) (s As String, createT As Func(Of String, T)) As T()
Dim a() As String = Split(s)
Dim b(UBound(a)) As T
For i As Integer = 0 To UBound(a)
b(i) = createT(a(i))
Next
fGeneric = b
End Function
fGeneric(Of class1)("some, string, value", Function(a) Return New class1(a))