Does anyone know how to iterate over a generic list if the type of that list isn't known until runtime?

For example, assume `obj1` is passed into a function as an `Object`:

```
Dim t As Type = obj1.GetType
If t.IsGenericType Then
    Dim typeParameters() As Type = t.GetGenericArguments()
    Dim typeParam As Type = typeParameters(0)
End If

```

If `obj` is passed as a `List(Of String)` then using the above I can determine that a generic list (`t`) was passed and that it's of type `String` (`typeParam`). I know I am making a big assumption that there is only one generic parameter, but that's fine for this simple example.

What I'd like to know is, based on the above, how do I do something like this:

```
For Each item As typeParam In obj1
    'do something with it here
Next

```

Or even something as simple as getting `obj1.Count()`.