Генерики в C# - как я могу создать экземпляр переменной типа аргумент? [дубликат]


этот вопрос уже есть ответ здесь:

у меня есть класс generics, где я хочу создать экземпляр объекта с универсальным типом. Я хочу использовать аргумент для конструктора типа.

мой код:

public class GenericClass<T> where T : Some_Base_Class, new()
{
    public static T SomeFunction(string s)
    {
        if (String.IsNullOrEmpty(s))
            return new T(some_param);
    }
}

Я получаю сообщение об ошибке на

new T(some_param)

'T': не удается предоставить аргументы при создании экземпляра переменной типа

любые идеи, как я могу это сделать?

1 67

1 ответ:

посмотри Activator.CreateInstance. Например:

var instance = Activator.CreateInstance(typeof(T), new object[] { null, null });

очевидно, что замена nulls с соответствующими значениями, ожидаемыми одним из конструкторов типа.

если вы получаете сообщение об ошибке компилятора о cannot convert object to type T, а затем as T:

var instance = Activator.CreateInstance(typeof(T), 
                  new object[] { null, null }) as T;