Допустим, у меня есть этот классДинамическое добавление элементов в список <T> посредством отражения
class Child {
public string FirstName { get; set; }
public string LastName { get; set; }
}
class Container {
public List<Child> { get; set; }
}
Я работаю на десериализатор рода, и я хочу, чтобы иметь возможность создавать и заполнять Child
список из данных извлекаться. Я получил это далеко (я вырезал много обработки для других типов для данного примера поэтому его излишне «ненадежный», но чуть-чуть со мной):
var props = typeof(Container).GetProperties();
foreach (var prop in props) {
var type = prop.PropertyType;
var name = prop.Name;
if (type.IsGenericType) {
var t = type.GetGenericArguments()[0];
if (type == typeof(List<>)) {
var list = Activator.CreateInstance(type);
var elements = GetElements();
foreach (var element in elements) {
var item = Activator.CreateInstance(t);
Map(item, element);
// ??? how do I do list.Add(item) here?
}
prop.SetValue(x, list, null); // x is an instance of Container
}
}
}
Я не могу понять, как бросить list
по существу List<t.GetType()>
, поэтому я могу получить доступ к методу добавления и добавить элемент.
Мне нравится эта идея. –