C# 通用方法作为参数传递,参数类型“bool”不可分配给参数类型“System.Func<bool>”

问题描述 投票:0回答:1

我正在尝试创建一个通用数组迭代器,它会迭代多维数组,并为每个元素分配函数的结果。

尝试以下代码时出现错误:

参数类型“

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();
        }
    }
}

我期望布尔结果能够与代码一起使用,但是骑手显示了如上所述的错误。

c# generics types
1个回答
0
投票

问题就在这里

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];
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.