Block.Tile 由于其安全级别,Positions () 不可用

Block.Tile Positions () is unavailable due to its security level

我有 TilePositions() 组件,当我尝试将其从私有更改为 public 时,我遇到了通用的新错误,即: “可访问性不一致,return类型“IEnumerable”比“Block.TilePositions()”方法更难访问 “

照片如下: Block.cs class, GameGrid.cs class

然后我将其更改为 public: Block.cs calss, GameGrid.cs class

public abstract class Block
    {
        Position[][] Tiles { get; }  
        Position StartOffset { get; }    
        public abstract int Id { get; }

        private int rotationState;
        private Position offset;


        public Block()
        {
            offset = new Position(StartOffset.Row, StartOffset.Column);
        }


        private IEnumerable<Position> TilePositions() //here is error
        {
            foreach (Position p in Tiles[rotationState])
            {
                yield return new Position(p.Row + offset.Row, p.Column + offset.Column);
             
            }
        }
}
private bool BlockFits()
        {
            foreach (Position p in CurrentBlock.TilePositions())
            {
                if (!GameGrid.IsEmpty(p.Row,p.Column))
                {
                    return false;
                }
            }
            return true;
        }

将 private 更改为 public 以便从 out 对象访问。

 public IEnumerable<Position> TilePositions() //here is error
    {
        foreach (Position p in Tiles[rotationState])
        {
            yield return new Position(p.Row + offset.Row, p.Column + offset.Column);
         
        }
    }

public : 在c#中,public修饰符用于指定不限制访问,所以可以访问定义的类型或成员通过当前程序集中的任何其他代码或引用它的另一个程序集。

private :在c#中,private修饰符用于指定访问仅限于包含类型,因此定义的类型或成员只能被其中的代码访问相同的 class 或结构。