The keys to this are MakeGenericType() and MakeGenericMethod(). Once you've gone dynamic with the types, you can't really go back to static typing. What you CAN do is create the list dynamically, by using Activator.CreateInstance(typeof(List<>).MakeGenericType(type)) and then dynamically calling the generic method using similar reflective methods.