我有一个列表:圆形,三角形,矩形
我想用id X编辑元素,但是列出[X] .radius;不可用,因为它是一个儿童班。
答案 0 :(得分:7)
您必须在运行时检测元素的动态类型。
IShape value = list[x];
if(value is Circle)
{
((Circle)value).radius = 5;
}
您还可以执行以下操作:
Circle value = list[x] as Circle;
if(value != null)
{
value.radius = 5;
}
这样做的好处是速度更快,因为演员表只进行一次。
答案 1 :(得分:1)
如果您有一个混合列表并且想要访问为派生类型定义的成员,则必须转换为派生类型。
((Circle)list[index]).Radius = 10; // alternately use is or as if you're unsure
当然,由于简单地拥有混合列表,你说你通常不关心派生类型之间的差异,你满足于使用基本多态。如果您发现自己处于不同的位置,您或许应该重新考虑存储或使用这些元素的策略。
答案 2 :(得分:0)
Typecast it:
((Circle)list[X]).Radius