public List <Move> FindAllPossibleMovesForPiece(IPiece piece) { var moves = new List <Move>(); List <Square> moveDestinations = piece.FindAllPossibleLegalMoveDestinations(); foreach (var moveDestination in moveDestinations) { var move = new Move(this, piece, moveDestination); moves.Add(move); } return(moves); }