Вы можете сделать конструкцию List<>
, используя следующее:
// Find the generic argument type of your old list (theList)
Type genericType = theList.GetType().GetGenericArguments()[0];
// Create a new List with the same generic type as the old one
Type newListType = typeof(List<>).MakeGenericType(genericType);
// Create a new instance of the list with the generic type
var instance = Activator.CreateInstance(newListType);
Но это сработает, только если вы используете общие списки.В приведенном вами примере использовался обычный IList
.Вам нужно изменить сигнатуру метода, чтобы использовать универсальный IList<>
:
public void AlphaToChar(IList<Something> _blah) { }
или сделать его еще более универсальным:
public void AlphaToChar<T>(IList<T> _blah) /* where T : ISomething, new() */ {}
Без этого вы должны знатьIList
будет содержать, и вам не придется использовать отражение, чтобы выяснить, каковы его типы элементов.