Search code examples
c#reflection.net-2.0

Using Reflection to set a Property with a type of List<CustomClass>


How can I use reflection to create a generic List with a custom class (List<CustomClass>)? I need to be able to add values and use propertyInfo.SetValue(..., ..., ...) to store it. Would I be better off storing these List<>'s as some other data structure?

Edit:

I should have specified that the object is more like this, but Marc Gravell's answer works still.

class Foo
{
    public List<string> Bar { get; set; }
}

Solution

  • class Foo
    {
        public string Bar { get; set; }
    }
    class Program
    {
        static void Main()
        {
            Type type = typeof(Foo); // possibly from a string
            IList list = (IList) Activator.CreateInstance(
                typeof(List<>).MakeGenericType(type));
    
            object obj = Activator.CreateInstance(type);
            type.GetProperty("Bar").SetValue(obj, "abc", null);
            list.Add(obj);
        }
    }