Gui*_*meA -5 .net c# linq inheritance
我有衍生类的问题.
我有一个父类和几个子类
public abstract class Parent
{}
public class Child1 : Parent
{}
public class Child2 : Parent
{}
public class Child3 : Parent
{}
Run Code Online (Sandbox Code Playgroud)
然后我有一个这些对象的列表
List<Parent> myList = new List<Parent>(){ new Child1(), new Child2(), new Child2() .....};
Run Code Online (Sandbox Code Playgroud)
我想要一个函数来检索此列表的对象,指定其类型.现在,我为每种子类型构建了一个这样的方法,但是当子类型数量增加时,可能会出现问题
public Child1 GetChild1()
{
Child1 child = myList.FirstOrDefault(ch => ch is Child1) as Child1;
if(child == null)
{
child = new Child1;
myList.Add(child);
}
return child;
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找类似的东西
public Parent GetChild(Type typeOfChild)
-- or --
public Parent GetChild(string typeOfChild)
-- or --
public Parent GetChild<T>()
Run Code Online (Sandbox Code Playgroud)
编辑:第一个进展
private void GetChild<T>() where T : class
{
IEnumerable<T> list = myList.OfType<T>();
T item;
if(list.Count() > 0)
{
item= list.First<T>();
}
else
{
item= Activator.CreateInstance<T>();
}
myList.Add(workspace); //invalid argument
}
Run Code Online (Sandbox Code Playgroud)
编辑:解决方案
private void GetChild<T>() where T : Parent, new()
{
T item = myList.FirstOrDefault(ch => ch is T) as T;
if(item == null)
{
item = new T();
myList.Add(item);
}
OtherMethod(item);
}
Run Code Online (Sandbox Code Playgroud)