方法返回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;
}
}
正如你所看到的,我正试图动态地创建一个列表,其中的"类型"来自方法的参数,我做得对吗?或者有其他方法吗?
很难判断您是否在做正确的事情,因为您的伪代码目前还没有编译。
我认为您正在尝试根据某种类型筛选列表。我认为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
}