Quiero agregar un elemento a una lista genérica utilizando la reflexión. En el método "HacerAlgo", que estoy tratando de terminar la siguiente línea,Agregar elemento a la lista genérica/colección usando la reflexión
pi.PropertyType.GetMethod("Add").Invoke(??????)
pero yo estoy haciendo diferentes tipos de error.
A continuación se muestra el código completo
public class MyBaseClass
{
public int VechicleId { get; set; }
}
public class Car:MyBaseClass
{
public string Make { get; set; }
}
public class Bike : MyBaseClass
{
public int CC { get; set; }
}
public class Main
{
public string AgencyName { get; set; }
public MyBaseCollection<Car> lstCar {get;set;}
public void DoSomething()
{
PropertyInfo[] p =this.GetType().GetProperties();
foreach (PropertyInfo pi in p)
{
if (pi.PropertyType.Name.Contains("MyBaseCollection"))
{
//Cln contains List<Car>
IEnumerable<MyBaseClass> cln = pi.GetValue(this, null) as IEnumerable<MyBaseClass>;
**//Now using reflection i want to add a new car to my object this.MyBaseCollection**
pi.PropertyType.GetMethod("Add").Invoke(??????)
}
}
}
}
cualquier idea/sugerencia?
¿Qué tipo es MyBaseCollection? ¿Es similar a una lista? No se garantiza que todas las clases que implementan IEnumerable tengan un método Add. –
JoeyRobichaud
@JoeRobich: MyBaseCollection es una implementación de colección propia que deriva de IList, incluso la respuesta para la lista debería resolver mi problema ... –
kayak