IEnumerable变量类型
在下面的示例中,我有一个称为GetList的方法,它接受一个字符串参数并返回一个List实体。我在一个通用的IEnumerable变量中捕获它,因为在运行时我不知道用户可能需要什么实体。我如何使用实际的类型而不是对象?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;
...
}
你不能在符合的代码中使用这种类型 - 所以真的没有办法在没有反射的情况下创建它。
最接近你可以得到你似乎想要的是IEnumerable<dynamic>
所以你可以基于他们的运行时类型访问对象的属性。
如果您只是需要创建强类型枚举以返回其他代码,那么其效果会比IEnumerable<object>
更好,您可以使用反射来创建此类型(Create generic List<T> with reflection)。与其说这是直接使用MakeGenericMethod
用正确的类型(How do I use reflection to call a generic method?)后,通过反射调用它
您可能还可以有访问结果在强类型的方式,但通用功能。
谢谢!真正的答案,而不是snark :) – jjf1978
您可以GetList()
通用:
IEnumerable<Company> data = GetList<Company>(entityName);
IEnumerable<T> GetList<T>(string entityName)
{
List<T> list = new List<T>();
// Populate list here
return list;
}
'GetList(entityName).Cast()' –
虽然我不知道它会是公司。它可能是员工或角色等..我唯一的信息是一个字符串(entityName)表示他们想要查询的实体。 – jjf1978
那么,在这种情况下,你应该保持你的对象。编译器也不会为你知道。你将不得不做出一些类型的猜测来知道你正在使用什么类型。或者您需要向我们提供代码执行的环境,以便我们找到解决方法。 –