变量类型的可枚举对象

本文关键字:枚举 对象 类型 变量 | 更新日期: 2023-09-27 18:08:35

在下面的例子中,我有一个名为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;
   ...
}

变量类型的可枚举对象

你不能在编译过的代码中使用这种类型——所以没有办法在没有反射的情况下创建它。

最接近你想要的是IEnumerable<dynamic>,所以你可以根据对象的运行时类型访问属性。

如果你只是需要创建强类型的enumerable来返回到其他一些期望比IEnumerable<object>更好的代码中,你可以使用反射来创建这样的类型(create generic List通过反射)。

你也可以有泛型函数访问结果在强类型的方式,但不是调用它直接调用它通过反射后使用MakeGenericMethod正确的类型(我如何使用反射调用泛型方法?)。

您可以使GetList()通用:

IEnumerable<Company> data = GetList<Company>(entityName);
IEnumerable<T> GetList<T>(string entityName)
{
    List<T> list = new List<T>();
    // Populate list here
    return list;
}