C# 访问基类列表中的派生类对象
假设我有3门课:C# 访问基类列表中的派生类对象,c#,list,inheritance,C#,List,Inheritance,假设我有3门课: class Geometry { ... } class Line : Geometry { ... } class Circle : Geometry { ... } 我想把Line和Circle类的所有对象放在一个公共列表中,如下所示: List<Geometry> list = new List<Geometry>(); Line line = new Line(); Circle circle = new Circle(); list.Ad
class Geometry
{ ... }
class Line : Geometry
{ ... }
class Circle : Geometry
{ ... }
我想把Line
和Circle
类的所有对象放在一个公共列表中,如下所示:
List<Geometry> list = new List<Geometry>();
Line line = new Line();
Circle circle = new Circle();
list.Add(line);
list.Add(circle);
如果没有,那么有没有一种好方法可以将所有这些不同类型的对象存储在同一个列表下?当然可以这样存储它们。因为所有对象都有一个共同的基础,即
几何体
对象,所以这很好
然后,当您从列表中检索它们时,我建议您使用as
操作符,如下所示:
Line newLine = list[0] as Line;
我建议这样做,因为正如MSDN中所述:
as运算符类似于强制转换操作。但是,如果转换不正确
可能,as返回null而不是引发
例外。考虑下面的例子:
当然你可以这样储存。因为所有对象都有一个共同的基础,即
几何体
对象,所以这很好
然后,当您从列表中检索它们时,我建议您使用as
操作符,如下所示:
Line newLine = list[0] as Line;
我建议这样做,因为正如MSDN中所述:
as运算符类似于强制转换操作。但是,如果转换不正确
可能,as返回null而不是引发
例外。考虑下面的例子:
这个怎么样:
List<Geometry> list = new List<Geometry>();
Geometry line = new Line();
Geometry circle = new Circle();
list.Add(line);
list.Add(circle);
这个怎么样:
List<Geometry> list = new List<Geometry>();
Geometry line = new Line();
Geometry circle = new Circle();
list.Add(line);
list.Add(circle);
是的,这是允许的,因为
直线
和圆
是几何体
:
List<Geometry> list = new List<Geometry>() {
new Line(),
new Circle()
};
要提取所有,例如,行
,请使用Linq:
List<Line> lines = list.OfType<Line>().ToList();
List line=List.OfType().ToList();
是的,这是允许的,因为直线
和圆
是几何体
:
List<Geometry> list = new List<Geometry>() {
new Line(),
new Circle()
};
要提取所有,例如,行
,请使用Linq:
List<Line> lines = list.OfType<Line>().ToList();
List line=List.OfType().ToList();
允许并可以使用它。允许并可以使用它。OfType()返回IEnumerable而不是列表。这不会编译:)of type()返回IEnumerable而不是列表。这不会编译:)