在下面的例子中,我有一个名为GetList的方法,它接受一个字符串参数并返回一个List实体。我在一个通用的IEnumerable变量中捕获它,因为在运行时我不知道用户可能想要什么实体。如何使用实际类型而不是对象?
我想替换这个...
IEnumerable<object> data = GetList(entityName);
有了......
IEnumerable<Company> data = GetList(entityName);
我现在能够想到处理它的唯一方法,因为我们有300多个实体,所以我不打算这样做
switch(entitName)
{
case "Company":
IEnumerable<Company> data = GetList(entityName);
break;
case "Employee":
IEnumerable<Employee> data = GetList(entityName);
break;
...
}
答案 0 :(得分:2)
你不能在编译代码中使用这种类型 - 所以没有反射就没有办法创建它。
最近,你可以得到你想要的是IEnumerable<dynamic>
,这样你就可以根据它们的运行时类型访问对象的属性。
如果你只需要创建强类型枚举来返回一些期望优于IEnumerable<object>
的其他代码,你可以使用反射来创建这样的类型(Create generic List<T> with reflection)。
您也可以使用以强类型方式访问结果的泛型函数,但在使用MakeGenericMethod
使用正确类型(How do I use reflection to call a generic method?)后,不要通过反射直接调用它。
答案 1 :(得分:0)
您可以GetList()
通用:
IEnumerable<Company> data = GetList<Company>(entityName);
IEnumerable<T> GetList<T>(string entityName)
{
List<T> list = new List<T>();
// Populate list here
return list;
}