如何检查二维数组中是否存在密钥对

本文关键字:是否 存在 密钥对 二维数组 何检查 检查 | 更新日期: 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的。