C# 如何在不同对象的列表上循环以对其运行相同名称(和相同数据类型)的方法?

C# 如何在不同对象的列表上循环以对其运行相同名称(和相同数据类型)的方法?,c#,C#,我正在做一个国际象棋游戏,我有几类棋子(车,骑士…等等)。 当游戏开始时,被启动的棋子的对象被收集在一个列表中(list)。 每个类都有一个名为(availableMove)的方法,该方法返回相同的类型,但每个类都有不同的实现方式 我想要的只是一种遍历列表并对其使用方法的方法 在一个神奇的世界里,一切都按照我的意愿运行,这就是它的样子: foreach(var item in listOfDifferentObjects) { item.availableMove(); } 但这给了我一个错误

我正在做一个国际象棋游戏,我有几类棋子(车,骑士…等等)。 当游戏开始时,被启动的棋子的对象被收集在一个列表中(
list
)。 每个类都有一个名为(
availableMove
)的方法,该方法返回相同的类型,但每个类都有不同的实现方式

我想要的只是一种遍历列表并对其使用方法的方法

在一个神奇的世界里,一切都按照我的意愿运行,这就是它的样子:

foreach(var item in listOfDifferentObjects)
{
item.availableMove();
}
但这给了我一个错误:

Cannot implicitly convert type 'object' to 'Chess.Models.Pieces.Piece'. An explicit conversion exists (are you missing a cast?)

为你的棋子创建一个基类

public abstract class ChessPiece
{
    public abstract void AvailableMove();
}
然后从基类派生专门的片段

public class Rook : ChessPiece
{
    public override void AvailableMove()
    {
        // ...do stuff.
    }
}
然后,您可以使用
棋子列表来迭代

foreach (var chessPiece in chessPieces)
    chessPiece.AvailableMove();
如果列表中有其他对象,并且需要将
对象
作为项目类型,则可以使用Linq筛选列表

foreach (var chessPiece in allObjects.OfType<ChessPiece>())
    chessPiece.AvailableMove();
foreach(allObjects.OfType()中的var chessPiece)
chessPiece.AvailableMove();

这些类中的每一个都需要实现相同的接口(或扩展相同的基类),该接口声明了该方法。然后每个都可以有自己的实现你需要一个接口。。。我现在正在读有关它的书。