2009-07-02 13 views
5

Quiero hacer algo como lo siguiente en VB.NET, ¿es posible?¿Se puede pasar un "tipo" como argumento?

Function task(value as Object, toType as Type) 

    Return DirectCast(value, toType) 

End Function 
+1

¿Por qué no emitir su objeto * * antes de enviarlo a la Función de tarea? – Juliet

+0

¿No es una solución obvia? –

Respuesta

12

Sí. Hay System.Type. Sin embargo, es posible que desee hacer un genérico.

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

Oh doh. Estoy tan acostumbrado a C# en estos días. –

2

que desea utilizar el

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

Sí, sin embargo, dependiendo de sus necesidades, es posible que desee utilizar CType hacer cualquier tipo de fundición/conversión. CType funcionará siempre que haya una conversión de tipo válida, mientras que DirectCast requiere que value sea del tipo toType.

2

Gran respuesta - He aquí una función genérica para hacer lo mismo:

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 

llamada así:

BindDropdownToEnum(Of MyClass.MyEnum)(MyRadioButtonListControl) 
Cuestiones relacionadas