c# - 在 C# 中用二维数组属性封装一维数组字段
问题描述
我有一个类,其中包含一个公共二维数组作为其接口的一部分:
public Vector2Int MazeSize { get; }
public MazeCellDescriptor[,] wallGrid { get; }
我需要序列化这个类,而我们使用的序列化器无法处理多维数组*(哎呀!)
我可以创建一个函数来访问数组元素...
public Vector2Int MazeSize { get; }
private MazeCellDescriptor[] wallGrid;
public MazeCellDescriptor getWall (int x, int y) => this.wallGrid[x + (y * this.MazeSize.x)];
...但它会破坏我现有的界面。理想情况下,我只需定义一个二维数组属性并将其转换为背面的一维数组,无需更改公共接口。这似乎是最OOO的解决方案,但我不确定它是否可能,我只是语法错误,或者没有办法做到这一点。
public MazeCellDescriptor[int x, int y] WallGrid => this.wallGrid[x + (y * this.MazeSize.x)];
public MazeCellDescriptor[,] WallGrid[int x, int y] => this.wallGrid[x + (y * this.MazeSize.x)];
// or something like that, neither of these compile...
*就上下文而言,这是一个 Unity 游戏项目。我找到了一些可能的解决方案(更改接口,或在序列化之前转换数组),所以我不是在寻找一般建议,只是想知道这种特定方法在我使用的语言中是否可行。谢谢!
解决方案
我想你尝试的几乎就在那里。你可以简单地使用一个属性,例如
public MazeCellDescriptor this[int x, int y]
{
get => this.wallGrid[x + (y * this.MazeSize.x)];
set
{
this.wallGrid[x + (y * this.MazeSize.x)] = value;
}
}
推荐阅读
- python - 使用熊猫转换嵌套数组/列表中的excel列
- sql - 使用 Microsoft Query 和 SQL 过程返回多行数据
- html - 如何在本地工作时在 HTML 文件中显示 SVG Sprite 图标?
- javascript - Discord.js 自定义表情符号错误看起来很简单,但我该如何解决?
- javascript - 将行号添加到预格式化文本
- django - React 和 Django 如何真正协同工作
- c - Windows10平台_execl()函数的使用
- google-bigquery - BigQuery 中是否有一种方法可以保存来自区域内多区域的查询
- java - Android Exif 数据未存储在图片文件中
- asp.net-core - ConfigureWebHostDefaults 中的 UseSerilog 未知引用