I have a class with a property IEnumerable<T>
. How do I make a generic method that creates a new List<T>
and assigns that property?
IList list = property.PropertyType.GetGenericTypeDefinition()
.MakeGenericType(property.PropertyType.GetGenericArguments())
.GetConstructor(Type.EmptyTypes);
I dont know where is T
type can be anything
Assuming you know the property name, and you know it is an IEnumerable<T>
then this function will set it to a list of corresponding type:
public void AssignListProperty(Object obj, String propName)
{
var prop = obj.GetType().GetProperty(propName);
var listType = typeof(List<>);
var genericArgs = prop.PropertyType.GetGenericArguments();
var concreteType = listType.MakeGenericType(genericArgs);
var newList = Activator.CreateInstance(concreteType);
prop.SetValue(obj, newList);
}
Please note this method does no type checking, or error handling. I leave that as an exercise to the user.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With