C# 在对象列表上调用公共类方法

C# 在对象列表上调用公共类方法,c#,C#,我有一个对象列表: var objs = new List<object> { new A(1), new B(2,3), new C() }; 我知道我可以使用类名、方法名和反射来实现这一点,但是有没有类似于上面描述的方法呢 编辑:在每个类中定义Calculate()。A、B和C应派生自公共基类或实现一个接口,在该接口中声明Calculate()方法: public class CommonBase { public virtual int Cal

我有一个对象列表:

var objs = new List<object> {
    new A(1),
    new B(2,3),
    new C()
};
我知道我可以使用类名、方法名和反射来实现这一点,但是有没有类似于上面描述的方法呢


编辑:在每个类中定义
Calculate()

A
B
C
应派生自公共基类或实现一个接口,在该接口中声明
Calculate()
方法:

public class CommonBase
{
    public virtual int Calculate() => 0;
}

public class A : CommonBase
{
    public override int Calculate() => 1;
} 

...
然后,您可以将类型从
List
更改为
List
,并在所有对象上调用该方法,而无需执行任何强制转换或反射:

foreach(var o in objs)
{ 
    o.Calculate();
}

编辑:使用
dynamic
关键字不会使您避免运行时错误。编译器确实允许您将没有
Calculate()
方法的任何对象添加到
列表
,但如果在对象上没有定义此类方法,则代码将在运行时失败。

Do
a
B
C
有一个带有
Calculate
方法的公共基类或接口?听起来像是接口的完美用例。您可以使用
List
并处理调用
o时的时间。如果缺少该方法,则Calculate()
会失败。@Sean将类型从object更改为dynamic成功。谢谢@迈克:
dynamic
不会让你免于运行时错误。编译器确实允许您将没有
Calculate()
方法的任何对象添加到
列表
,但是如果在对象上没有定义此类方法,则您的代码在运行时将失败。这确实比将类型更改为动态要好,谢谢!
foreach(var o in objs)
{ 
    o.Calculate();
}