tengo este método:¿Cómo llamas a un método genérico si solo conoces el parámetro de tipo en tiempo de ejecución?
public List<T> SomeMethod<T>(params) where T : new()
por lo que quiero llamar a este SomeMethod
lo cual está bien si conozco el tipo:
SomeMethod<Class1>();
Pero si sólo tengo Class1
en tiempo de ejecución Soy incapaz de ¿llámalo?
Entonces, ¿cómo llamar al SomeMethod
con un tipo desconocido de T? Obtuve Type usando reflection.
Tengo el tipo de tipo pero SomeMethod<Type | GetType()>
no funciona.
actualización 7. mayo:
Aquí es un código de ejemplo de lo que quiero lograr:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ConsoleApplication63
{
public class DummyClass
{
}
public class Class1
{
public string Name;
}
class AssemblyTypesReflection
{
static void Main(string[] args)
{
object obj = new Class1() { Name = "John" } ;
Assembly assembly = Assembly.GetExecutingAssembly();
var AsmClass1 = (from i in assembly.GetTypes() where i.Name == "Class1" select i).FirstOrDefault();
var list = SomeMethod<AsmClass1>((AsmClass1)obj); //Here it fails
}
static List<T> SomeMethod<T>(T obj) where T : new()
{
return new List<T> { obj };
}
}
}
Esta es una demostración sacado de un contexto más grande.
SLaks ha respondido bien a su pregunta. Solo te estoy diciendo que usaste mal la palabra "anónimo" aquí, lo que significa algo diferente. En tu caso, T es genérico. – SimpleVar
¿Es esta su API o alguna API de terceros? Si es tuyo, considera cambiarlo, porque los genéricos no resuelven el problema, sino que lo crean en este caso. – empi
posible duplicado de [Llamando al método genérico con un argumento de tipo conocido solo en tiempo de ejecución] (http://stackoverflow.com/questions/325156/calling-generic-method-with-a-type-argument-known-only-at -execution-time) – user7116