Я хотел бы создать экземпляр нового объекта, где тип и общий тип определяются как переменные. Окончательный результат может выглядеть newListOfObjects созданного вручную здесь:Мгновенное создание общего типа из переменной
var newListOfObjects = new List<TabViewModel>();
Где TabViewModel является следующим объектом:
public class TabViewModel
{
public string Title { get; set; }
public int TabOrder { get; set; }
}
Проблема возникает при попытке создать экземпляр нового объекта, используя только переменные. У нас есть одна универсальная переменная типа genericType, которая представляет собой интерфейс и один список аргументов типа, listOfTypeArgs. В приведенном выше примере общий тип будет IList, а аргументами будет TabViewModel. Это будет выглядеть следующим образом (примечания, некоторые коды psudo для облегчения понимания):
Type genericType = IList'1;
Type[] listOfTypeArgs = TabViewModel;
var newObject = Activator.CreateInstance(genericType.MakeGenericType(listOfTypeArgs));
Тогда очевидно, что я получаю ошибку «System.MissingMethodException» с запиской, что я не могу создать экземпляр переменная от интерфейса.
Как преобразовать интерфейс в его представительный, чтобы я мог создать экземпляр нового объекта?
ПРИМЕЧАНИЕ: Я не могу изменить тип genericType = IList'1; nor Тип [] listOfTypeArgs = TabViewModel;
Этот тип 'GenericType = IList'1;' 'и этот тип [] listOfTypeArgs = TabViewModel;' не является допустимым в C# синтаксис. Отправьте фактический код! – user3185569
Действительный код для получения типа IList и TabViewModel в этом случае не имеет значения. –
Вы можете прочитать http://stackoverflow.com/help/mcve перед публикацией, если вы решите проигнорировать запрос user3185569. – Aziuth