如何检查二维数组中是否存在密钥对
本文关键字:是否 存在 密钥对 二维数组 何检查 检查 | 更新日期: 2023-09-27 17:58:35
我有这个2d数组或结构
public struct MapCell
{
public string tile;
}
public MapCell[,] worldMap;
但无法检查此数组中是否存在密钥对。。。没有可用的方法。
我试着像这个一样做
if (worldMap[tileX, tileY] != null) {
}
它不起作用:
Error 1 Operator '!=' cannot be applied to operands of type 'Warudo.MapCell' and '<null>'
和
if (worldMap[tileX, tileY].tile != null) {
它也不起作用(当它碰到不存在的元素时会弹出异常)。
Index was outside the bounds of the array.
那么,我该如何检查密钥对是否存在呢?
您从未提及您得到的错误——数组越界或空引用。如果数组超出了界限,则应该在null检查之前加上。。。
// make sure we're not referencing cells out of bounds of the array
if (tileX < arr.GetLength(0) && tileY < arr.GetLength(1))
{
// logic
}
当然,最好只存储最大数组边界,而不是每次都获取它们的长度。
我还支持(第三?)使用类而不是结构的建议。
编辑:你真的初始化过这个字段吗?您尚未将其包含在代码示例中。例如worldMap = new MapCell[100,100];
,然后填充数组。。。
如果您使用的是结构值的数组,它们总是存在(一旦构造了数组),但在您设置它们之前,它们具有默认值。
我建议在这里使用类而不是结构。这将允许您检查null,并且如果您要更改值(给定名称,我希望…),则可以以预期的方式进行更多操作。
话虽如此,您可以检查结构中的字符串是否为空:
if (worldMap[tileX, tileY].tile != null)
{
// You've set the "tile" field inside of this "cell"...
这是因为结构的默认值是用包括字符串在内的所有引用初始化为null的。