Как проверить, существует ли пара ключей в 2D массиве? - PullRequest
1 голос
/ 06 июня 2011

У меня есть этот 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 ]

5 голосов
/ 06 июня 2011

Вы никогда не упоминали, какую ошибку вы получаете - массив вне границ или нулевая ссылка. Если вы получаете массив вне границ, вам следует предшествовать нулевой проверке чем-то вроде ...

// 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];, а затем заполнить массив ...

0 голосов
/ 06 июня 2011

Если вы используете массив структурных значений, они всегда существуют (после создания массива), но имеют значение по умолчанию, пока вы их не установите.

Я бы рекомендовал использовать здесь класс вместо структуры. Это позволит вам проверить на нулевое значение, а также действовать более ожидаемым образом, если вы собираетесь изменять значения (которые, учитывая имена, я ожидаю ...)

При этом вы можете проверить, является ли строка в структуре нулевой:

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

Это работает, потому что значение по умолчанию для структуры инициализируется со всеми ссылками, включая строки, на null.

...