※ 引述《sakyer (石理克)》之銘言:
: 問題網頁版:
: https://goo.gl/uPmWK4
: 問題圖片版:
: https://goo.gl/lmLtoh
: 為了從別人的程式碼學習 c# ,我正試著將一個JS程式重寫成C#。
: 其中這段 eachCell 方法不知道在 C# 中該如何實現...
: 煩請各位大大給予建議與指教,謝謝!
: // Get available cells in Grid =========================
: Grid.prototype.availableCells = function () {
: var cells = [];
: this.eachCell(function (x, y, tile) {
: if (!tile) {
: cells.push({ x: x, y: y });
: }
: });
: return cells;
: };
: // Call callback for every cell=========================
: Grid.prototype.eachCell = function (callback) {
: for (var x = 0; x < this.size; x++) {
: for (var y = 0; y < this.size; y++) {
: callback(x, y, this.cells[x][y]);
: }
: }
: };
網頁版看比較清楚:
https://goo.gl/uPmWK4
經版上大大提點後,去研究一下委派的使用
最後使用委派:Action完成了我想要的功能
P.S 會再試試看改用 Func 會有什麼不同,目前還不理解他與Action的差異
================================
List<Tile> getAvailableCell()
{
List<Tile> cells = new List<Tile>();
Action<int, int, Tile> finder = (x, y, t) =>
{
if (t == null) cells.Add(new Tile(x, y, -1));
};
eachCell(finder);
return cells;
}
void eachCell(Action<int, int, Tile> act)
{
for (var x = 0; x < size; x++)
{
for (var y = 0; y < size; y++)
{
act(x, y, cells.ContainsKey(new Vector2(x, y)) ? cells[new
Vector2(x, y)] : null);
}
}
}