2009-07-02 6 views
5

Я хочу сделать что-то вроде следующего в VB.NET, возможно ли это?Можете ли вы передать «тип» в качестве аргумента?

Function task(value as Object, toType as Type) 

    Return DirectCast(value, toType) 

End Function 
+1

Почему вы не бросить свой объект * перед тем * отправить его в Функция задачи? – Juliet

+0

Разве это не обходное решение ?! –

ответ

12

Да. Существует System.Type. Однако вы, возможно, захотите сделать Generic.

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

О, ох. Я так привык к C# в эти дни. –

2

вы хотите использовать

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

Да, хотя, в зависимости от ваших потребностей, вы можете использовать CType сделать любой тип литья/преобразование. CType будет работать до тех пор, пока существует допустимое преобразование типа, тогда как DirectCast требует, чтобы value был типа toType.

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)