Lanzar objeto a lista genérica

Tengo 3 lista de tipos genéricos.

List<Contact> = new List<Contact>();
List<Address> = new List<Address>();
List<Document> = new List<Document>();

Y guárdelo en una variable con tipo objeto. Ahora necesito hacer Cast Back to List para realizar un foreach, algunos como este:

List<Contact> = (List<Contact>)obj;

Pero el contenido de obj cambia cada vez, y tengo algunos como este:

List<???> = (List<???>)obj;

Tengo otra variable que contiene el tipo obj actual:

Type t = typeof(obj);

¿Puedo hacer algo así?

List<t> = (List<t>)obj;

Obs: no tengo el tipo actual en la lista pero necesito emitir, y ahora no tengo otro formulario:

List<Contact> = new List<Contact>();

Respuestas a la pregunta(8)

Su respuesta a la pregunta