Использование Reflection для установки свойства с типом списка <CustomClass> - PullRequest
14 голосов
/ 24 ноября 2008

Как я могу использовать отражение, чтобы создать общий список с пользовательским классом (список )? Мне нужно иметь возможность добавлять значения и использовать propertyInfo.SetValue(..., ..., ...) чтобы сохранить его. Буду ли я лучше хранить эти List <> как какую-то другую структуру данных?

Edit:

Я должен был указать, что объект больше похож на этот, но ответ Марка Гравелла все еще работает.

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

Ответы [ 2 ]

19 голосов
/ 24 ноября 2008
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);
    }
}
1 голос
/ 24 ноября 2008

Вот пример взятия типа List <> и превращения его в List .

var list = typeof (List <>). MakeGenericType (typeof (string));

...