c#获取混合类型列表中元素的属性

时间:2011-12-13 16:30:49

标签: c# list casting

我有一个列表:圆形,三角形,矩形

我想用id X编辑元素,但是列出[X] .radius;不可用,因为它是一个儿童班。

3 个答案:

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