你能传递一个“类型”作为参数吗?

时间:2009-07-02 13:10:37

标签: vb.net casting types

我想在VB.NET中做类似下面的事情,有可能吗?

Function task(value as Object, toType as Type)

   Return DirectCast(value, toType)

End Function

5 个答案:

答案 0 :(得分:13)

是。有System.Type。你可能实际上想要做Generic。

Function SomeFunction(Of T)(obj As Object) As T
    '' Magic
End Function

答案 1 :(得分:2)

你想使用

function task(of myType)(value as myType) as MyType
   ''stuff
   return value
end function

答案 2 :(得分:2)

很棒的答案 - 这是一个通用的功能:

Public Sub BindListControlToEnum(Of T)(ListCtrl As ListControl)
    Dim itemValues As Array = System.Enum.GetValues(GetType(T))
    Dim itemNames As Array = System.Enum.GetNames(GetType(T))
    For i As Integer = 0 To itemNames.Length - 1
        Dim item As New ListItem(itemNames(i), itemValues(i))
        ListCtrl.Items.Add(item)
    Next
End Sub

这样称呼:

BindDropdownToEnum(Of MyClass.MyEnum)(MyRadioButtonListControl)

答案 3 :(得分:0)

是的,但是,根据您的要求,您可能希望使用CType进行任何类型的转换/转换。只要存在有效的类型转换,CType就会起作用,而DirectCast则要求value属于toType类型。

答案 4 :(得分:0)

我今天必须做类似的事情(基本上是从接受的答案中填写'' magic):

Private Function Convert_Value_Or_Fallback(Of T)(ByRef value As Object, ByRef fallback As Object) As Object
    Try
        Return DirectCast(value, T)
    Catch ex As Exception
        Return fallback
    End Try
End Function

'call it like this:'
Convert_Value_Or_Fallback(Of Double)(value, 0)