如何检查2D数组中的密钥对是否存在?

时间:2011-06-06 19:04:26

标签: c# arrays struct multidimensional-array

我有这个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.

那么,如何检查密钥对是否存在?

2 个答案:

答案 0 :(得分:5)

你从未提到过你遇到的错误 - 数组越界或空引用。如果你的数组超出了界限,那么你应该在你的空检查之前加上......

// 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];,然后填充数组......

答案 1 :(得分:-2)

如果你正在使用一个struct值数组,它们总是存在(一旦构造了数组),但是在你设置它们之前有它们的默认值。

我建议在这里使用一个类而不是结构。这将允许您检查null,并且如果您要更改值,则会以预期的方式执行更多操作(根据名称,我希望...)

话虽如此,您可以检查结构中的字符串是否为null:

if (worldMap[tileX, tileY].tile != null)
{
    // You've set the "tile" field inside of this "cell"...

这是有效的,因为struct的默认值初始化时所有引用(包括字符串)都为null。