Рекурсивно создать generic type - C#

Узнай цену своей работы

Формулировка задачи:

Всем привет. Есть такая необходимость. Пишу следующий код
 static Object CreateType<TObject>(params Object[] parameters)
        {
            var type = typeof (TObject);
            if (type.IsGenericType)
            {
                var genericTypeArgs = type.GetGenericArguments();
                var def = type.GetGenericTypeDefinition();
                var genericType = def.MakeGenericType(genericTypeArgs);
                return  Activator.CreateInstance(genericType, parameters);
            }
            return Activator.CreateInstance(type, parameters);
        }
вызываю следующим образом
return CreateType<TCacheObject>(new object[] {cache, findDif}) as IResultListCache<TCacheObject>;
выкидывает methodMissingException при этом если написать так
var resultCache = new ResultListCache<TResultObject>(cache, findDif);
все прекрасно работает. т.е. конструктор такой есть. К слову если вызвать конструктор без параметров для дженерик типа return Activator.CreateInstance(genericType); все прекрасно работает.

Решение задачи: «Рекурсивно создать generic type»

textual
Листинг программы
 static Object CreateType<TGeneric>(Type type, params Object[] parameters)
        {
            if (type.IsGenericType)
            {
                var genericType = type.MakeGenericType(typeof (TGeneric));
                return Activator.CreateInstance(genericType, parameters);
            }
            return Activator.CreateInstance(type, parameters);
        }
 
object type = CreateType<int>(typeof (List<>), null);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы