代码之家  ›  专栏  ›  技术社区  ›  Max Heinze

作为参数传递的C#泛型方法,参数类型“bool”不可分配给参数类型“System”。函数<bool>'

  •  0
  • Max Heinze  · 技术社区  · 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();
            }
        }
    }
    

    我期望一个布尔结果能与代码一起使用,然而rider显示了如上所述的错误。

    1 回复  |  直到 1 年前
        1
  •  0
  •   Faheem-maker    1 年前

    问题就在这里

    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];
        }
    }