C#继承类的列表

时间:2014-02-10 09:19:51

标签: c# list inheritance

我有以下课程:

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列表中。

如何成功添加继承的类?

1 个答案:

答案 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

参考:MSDN as Operator

正如评论中所提到的,您可以使用此代码段进行更多操作:

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)

进行比较