Приведение объекта в общий список

У меня есть 3 типа обобщенного списка.

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

И сохраните его в переменной с типом объекта. Теперь мне нужно выполнить Cast Back to List, чтобы выполнить foreach, например:

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

Но содержание obj меняется каждый раз, а у меня вот так:

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

У меня есть другая переменная, содержащая текущий тип объекта:

Type t = typeof(obj);

Могу ли я сделать что-то подобное ??

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

Obs: у меня нет текущего типа в списке, но мне нужно разыграть, и вместо этого у меня нет другой формы:

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