我确实试过阅读关于.Net generics&的这个主题的许多SO问题。动态转换,但仍然无法看到如何将其应用到我的WPF应用程序。
我有一个View和ViewModel,我用它来维护几个表的数据。这些表都具有在视图中显示的相同列/字段名称,即。我正在为表使用一个常见的View和ViewModel,因为如果代码全部在一个ViewModel文件中,我可以更轻松地维护和重用代码。
当我导航到View时,我知道要加载和使用哪个表。我需要做的是将记录选择为强类型的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;
}
}
但是使用Activator创建对象'o'之后的下一步是什么?然后,我如何为选择创建强类型的IEnumerable?提前谢谢。
答案 0 :(得分:0)
您已经构建了一个具体的泛型类型(又称“封闭”类型)。所以,考虑到你已经通过这样做的假设,这个简单的向下转换结束你的逻辑应该工作:
(IEnumerable<Foo>)o
(因为当然,你也知道List&lt;&gt;实现了IList&lt;&gt;,IEnumerable&lt;&gt;等)
(你的问题让我觉得你可能正试图解决XY问题。)
“HTH,