我遇到派生类的问题。
我有一个父类和几个子类
public abstract class Parent
{}
public class Child1 : Parent
{}
public class Child2 : Parent
{}
public class Child3 : Parent
{}
然后我有一个这些对象的列表
List<Parent> myList = new List<Parent>(){ new Child1(), new Child2(), new Child2() .....};
我想要一个函数来检索此列表的对象,指定其类型。现在,我为每种子类型构建了一个这样的方法,但是当子类型数增加时,可能会出现问题
public Child1 GetChild1()
{
Child1 child = myList.FirstOrDefault(ch => ch is Child1) as Child1;
if(child == null)
{
child = new Child1;
myList.Add(child);
}
return child;
}
我正在寻找像
这样的东西public Parent GetChild(Type typeOfChild)
-- or --
public Parent GetChild(string typeOfChild)
-- or --
public Parent GetChild<T>()
编辑:第一次进展
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
}
编辑:解决方案
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);
}
答案 0 :(得分:6)
答案 1 :(得分:1)
感谢Alexei提供更清洁的解决方案
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);
}