У меня есть эта функция:роли массива в переменной Object, чтобы ввести переменную System.Type
Public Sub DoStuff(ByVal type as System.Type, ByVal value as Object)
End Sub
«ценность» аргумент всегда является массив того же типа, как «типа». Как я могу перебирать значения массива?
Я хотел бы быть в состоянии сделать что-то вроде этого:
DoStuff(GetType(Integer), New Integer(){1,2,3})
Public Sub DoStuff(ByVal type as System.Type, ByVal value as Object)
//Strongly types arr as Integer()
Dim arr = SomeCast(type, value)
For Each i in arr
//Do something with i
Next
End Sub
Редактировать Хорошо, я думаю, что я буду добавлять больше деталей, так что вы можете увидеть, что я пытаюсь сделать. У меня есть объект, который фиксирует значения, возвращаемые с другой страницы. Как только я их захватил, я хочу перебрать свойство «Значения». Таким образом, для каждого словарного объекта в «Значениях» будет вызываться DoStuff() выше. Если значение в словаре objct является массивом, я хочу также пропустить его. Я сохранил тип, добавленный через общий вызов функции, как System.Type, но, возможно, это не путь. Как я могу написать это, чтобы впоследствии сохранить тип массива и цикл через массив?
Public Class PopUpReturnValues
Implements IPopUpReturnValues
Public Sub AddValue(Of T As Structure)(ByVal name As String, ByVal value As T) Implements IPopUpReturnValues.AddValue
_values.Add(name, New PopUpReturnValue() With {.UnderlyingType = GetType(T), .Value = value, .IsArray = False})
End Sub
Public Sub AddArray(Of T As Structure)(ByVal name As String, ByVal values As T()) Implements IPopUpReturnValues.AddArray
_values.Add(name, New PopUpReturnValue() With {.UnderlyingType = GetType(T), .Value = values, .IsArray = True})
End Sub
Public Sub AddStringValue(ByVal name As String, ByVal value As String) Implements IPopUpReturnValues.AddStringValue
_values.Add(name, New PopUpReturnValue() With {.UnderlyingType = GetType(String), .Value = value, .IsArray = False})
End Sub
Public Sub AddStringArray(ByVal name As String, ByVal values As String()) Implements IPopUpReturnValues.AddStringArray
_values.Add(name, New PopUpReturnValue() With {.UnderlyingType = GetType(String), .Value = values, .IsArray = True})
End Sub
Private _values As New Dictionary(Of String, PopUpReturnValue)
Public ReadOnly Property Values() As IDictionary(Of String, PopUpReturnValue)
Get
Return _values
End Get
End Property
Public Class PopUpReturnValue
Public UnderlyingType As Type
Public Value As Object
Public IsArray As Boolean
End Class
End Class
Это не совсем возможно и не имеет абсолютно никакого смысла. Что ты пытаешься сделать? – SLaks
Есть очень мало случаев, когда я когда-либо видел, где System.Type должен использоваться вне отражения. Еще до того, как у нас были дженерики, все еще были лучшие способы сделать то, что вы, вероятно, делаете. –
Хорошо ... что это? – adam0101