Я попытался прочитать много вопросов о этой теме .Net generics & динамическое кастинг, но до сих пор не вижу, как применить его к моему WPF-приложению.Кастинг с динамическими дженериками
У меня есть один View и ViewModel, с помощью которого я сохраняю данные для нескольких таблиц. Все таблицы имеют одинаковые имена столбцов/полей, которые отображаются в представлении, т. Е. описание, createate и т. д. Я использую один общий View и ViewModel для таблиц, потому что я могу более легко поддерживать и повторно использовать код, если он все в одном файле ViewModel.
Когда я перехожу к представлению, я знаю, какую таблицу загрузить и использовать. Что мне нужно, чтобы быть в состоянии сделать, это выбрать записи в сильно типизированных IEnumerable, как это:
private IEnumerable<Foo> _itemsList;
switch (_tableName)
{
case Foo:
{
_itemsList = (from myrow in UoW.FooRepository.Get()
orderby myrow.descr
select new FooModel()
{
foo_id = myrow.foo_id,
descr = myrow.descr,
createdate = myrow.createdate,
}).ToList();
break;
}
}
Из того, что я прочитал, мне нужно сначала сделать что-то вроде этого:
switch (_tableName)
{
case Foo:
{
var mylist = typeof(List<>);
Type[] typeArgs = { typeof(Foo) };
var makegenlist = ls.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makegenlist);
break;
}
}
Но каков следующий шаг после создания объекта «o» с помощью Activator? Как я могу создать сильно типизированный IEnumerable для выбора? Заранее спасибо.
Да, который работает после того, как я изменил мой ViewModel декларация of_itemsList для динамического типа вместо IEnumerable .. Спасибо. –
harpagornis