方法返回List的动态类型

本文关键字:动态 类型 List 返回 方法 | 更新日期: 2023-09-27 18:26:11

如果我有以下内容:

class Super {
 //stuff 
}
class Sub1 : Super {
 //stuff
}
class Sub2 : Super {
 //stuff
}
class Sub3 : Super {
 //stuff
}

运行类

class Run {
 //list of type Super with a bunch of sub objects (sub1,sub2,sub3)
 List<Super> superList = sub1,2,3 list;
 List<Super> partialSuperList;
 void doStuff() {
  Type subObjectType = superList[0].GetType();
  if (subObjectType == typeof(sub1)) {
   partialSuperList = categorize(subObjectType);
  } else if (subObjectType == typeof(sub2)) {
   partialSuperList = categorize(subObjectType);
  } else if (subObjectType == typeof(sub3)) {
   partialSuperList = categorize(subObjectType);
  }
 }
 List<Super> categorize(Type type) {
  List<type> subTypeList = new List<type>();
  //loop through subtype list and add it to a super type list
  return SuperList;
 }
}

正如你所看到的,我正试图动态地创建一个列表,其中的"类型"来自方法的参数,我做得对吗?或者有其他方法吗?

方法返回List的动态类型

很难判断您是否在做正确的事情,因为您的伪代码目前还没有编译。

我认为您正在尝试根据某种类型筛选列表。我认为Linq方法OfType<TResult>就是您想要的。

var superList = new List<Super> { ... };
var sub1List = superList.OfType<Sub1>().ToList();
var sub2List = superList.OfType<Sub2>().ToList();
var sub3List = superList.OfType<Sub3>().ToList();

如果你想在编译时过滤一个你不知道的类型,你可以做以下操作:

var superList = new List<Super> { ... };
var someType = superList.First().GetType();
var filteredSuperList = superList.Where(x => x.GetType() == someType).ToList();

使方法通用:

List<T> doStuff<T>() where T : Super
{
    List<T> list = new List<T>();
    // use list
}

您现在没有铸造问题,可以使用is:检查T

if (T is Sub1)
{
    ... // do something
}