我有以下课程:
public class BaseClass() {}
public class Class1 : BaseClass {}
public class Class2 : BaseClass {}
public class BaseClassList : List<BaseClass> {}
public class Class1List : List<Class1> {}
public class Class2List : List<Class2> {}
以JSON格式的数据被加载为BaseClass对象的列表。加载后,想要使用相关对象填充特定列表:
public void Setup()
{
Class1List list1 = new Class1List();
var query = from x in BaseClassList
where x.Type = MyType.Class1
select x;
list1.AddRange(query);
}
然而,AddRange无法编译,因为我正在尝试将BaseClass对象添加到Class1列表中。
如何成功添加继承的类?
答案 0 :(得分:1)
试试这段代码,
public void Setup()
{
Class1List list1 = new Class1List();
var query = from x in BaseClassList
where x.GetType() == typeof(Class1)
select x as Class1;
list1.AddRange(query);
}
as运算符会将您的类型BaseClass
强制转换为Class1
正如评论中所提到的,您可以使用此代码段进行更多操作:
public void Setup()
{
Class1List list1 = new Class1List();
var query = from x in BaseClassList
where x.GetType() == typeof(Class1)
select x;
foreach(var item in query){
var temp = item as Class1;
if(temp != null)
list1.Add(temp);
}
}
在转换为Class1之后,您可以检查null,因为as
运算符如果无法转换则返回null。我更愿意与where x.GetType() == typeof(Class1)