列表

时间:2016-02-01 20:30:23

标签: c# xml list inheritance

我正在尝试构建一个XML解释器,并且有很多继承正在进行。当我有一个列表并且我想访问特定类型的抽象时,有一个简短的方法吗?这就是我目前正在做的事情:

abstract class Foo{}
class iFoo : Foo
{
   int bar;
}
class xFoo : Foo
{
   string bar;
}

class Main
{
 List<Foo> fooList;
     public static void Main (string[]args)
     {
         iFoo iBar = fooList[0] as IFoo;
         xFoo xBar = fooList[1] as XFoo;
         iBar.bar = 10;
         xBar.bar = "hello world";
     }
}

*fooList已初始化并填充在代码的其他部分,这只是我的问题的一个示例。

我正在寻找一种更简单的方法,例如:

fooList[0](as type iFoo).bar = 10;

2 个答案:

答案 0 :(得分:1)

如果您知道实例上有哪些属性或方法,则可以转换为dynamic,以便编译器不会干扰它。

看起来像这样:

dynamic instance = fooList[0];
instance.bar = value;

value是您要分配的值的占位符 但请记住,操作必须有效。您只能因为投放到string而无法将int分配给dynamic

答案 1 :(得分:0)

您可以使用as关键字,如下所示:

(fooList[0] as IFoo).bar = 10;

(fooList[1] as XFoo).bar = "hello world";