我正在尝试创建一个通用数组迭代器,它会迭代多维数组,并为每个元素分配函数的结果。
尝试以下代码时出现错误:
参数类型“
”不可分配给参数类型“bool
”System.Func<bool>
我非常想了解我哪里出了问题。
private InitialiseGame()
{
_grid = new Grid();
if (this._gameOfLifeGrid == null)
{
_gameOfLifeGrid = new bool[_grid.x,_grid.y];
IterateThroughArray(_gameOfLifeGrid, GetRandomBool());
}
if (this._neighbours == null)
{
_neighbours = new int[_grid.x,_grid.y];
}
}
private static bool GetRandomBool()
{
return _random.Next(0, 1) > 0;
}
public void IterateThroughArray<T>(T[,] array, Func<T> myAction)
{
for (var x = 0; x < array.GetLength(0); x++)
{
for (var y = 0; x < array.GetLength(0); y++)
{
array[x,y] = myAction();
}
}
}
我期望布尔结果能够与代码一起使用,但是骑手显示了如上所述的错误。
问题就在这里
var _gameOfLifeGrid = new bool[5, 5];
IterateThroughArray(_gameOfLifeGrid, GetRandomBool()); // Notice the "()" after GetRandomBool
简单地说,您正在调用
GetRandomBool
函数,而不是将其传递给通用函数。因此,您实际上传递的是 GetRandomBool
的结果,而不是 GetRandomBool
本身。
这是更正后的代码:
private InitialiseGame()
{
_grid = new Grid();
if (this._gameOfLifeGrid == null)
{
_gameOfLifeGrid = new bool[_grid.x,_grid.y];
IterateThroughArray(_gameOfLifeGrid, GetRandomBool); // Remove "()" here
}
if (this._neighbours == null)
{
_neighbours = new int[_grid.x,_grid.y];
}
}