Я хочу сделать что-то вроде следующего в VB.NET, возможно ли это?Можете ли вы передать «тип» в качестве аргумента?
Function task(value as Object, toType as Type)
Return DirectCast(value, toType)
End Function
Я хочу сделать что-то вроде следующего в VB.NET, возможно ли это?Можете ли вы передать «тип» в качестве аргумента?
Function task(value as Object, toType as Type)
Return DirectCast(value, toType)
End Function
Да. Существует System.Type. Однако вы, возможно, захотите сделать Generic.
Function SomeFunction(Of T)(obj As Object) As T
'' Magic
End Function
О, ох. Я так привык к C# в эти дни. –
вы хотите использовать
function task(of myType)(value as myType) as MyType
''stuff
return value
end function
Да, хотя, в зависимости от ваших потребностей, вы можете использовать CType сделать любой тип литья/преобразование. CType будет работать до тех пор, пока существует допустимое преобразование типа, тогда как DirectCast требует, чтобы value
был типа toType
.
Великий ответ - вот общая функция, чтобы сделать то же самое:
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)
Почему вы не бросить свой объект * перед тем * отправить его в Функция задачи? – Juliet
Разве это не обходное решение ?! –