private static Square[] BackRow(int row, Team team)
{
var c = 0; // fires closure on ref parameter
Func<Team, Square> rook = t => NewSquare(c++, row, new Rook() { Team = t, PieceType = PieceType.Rook });
Func<Team, Square> knight = t => NewSquare(c++, row, new Knight() { Team = t, PieceType = PieceType.Knight });
Func<Team, Square> bishop = t => NewSquare(c++, row, new Bishop() { Team = t, PieceType = PieceType.Bishop });
Func<Team, Square> queen = t => NewSquare(c++, row, new Queen() { Team = t, PieceType = PieceType.Queen });
Func<Team, Square> king = t => NewSquare(c++, row, new King() { Team = t, PieceType = PieceType.King });
return new[]
{
rook(team), knight(team), bishop(team),
queen(team), king(team),
bishop(team), knight(team), rook(team)
};
}