Как проверить, существует ли массив в C#?

Есть ли способ проверить, существует ли массив или имеет ли значение в определенном элементе?

У меня есть эта строка кода

if (rummen[positionX, positionY].Levandesaker[0].alive == true)

И он отлично работает, пока существует. Но что я хочу сделать, это

if (rummen[positionX, positionY].Levandesaker != null)
{
    if (rummen[positionX, positionY].Levandesaker[0].alive == true)
    {
    }
}

Кто-нибудь знает, что мне нужно, или может помочь мне с тем, что я ищу?

Ответов (4)

Решение
if (rummen[positionX, positionY].Levandesaker != null &&
    rummen[positionX, positionY].Levandesaker.Count > 0)
{
    if (rummen[positionX, positionY].Levandesaker[0].alive == true)
    {
    }
}

Я не совсем уверен, о каком массиве вы говорите сейчас, когда я думаю об этом. Вы имеете в виду Левандесакер или роммен?

Если вы хотите проверить, является ли что-то массивом или нет, проверьте тип массива:

if (rummen[positionX, positionY].Levandesaker is Array) { ... }

аспект массива несущественен (ваш код уже предполагает, что запись не равна нулю)

Я предполагаю следующее:

public class Rummen
{
    public property Levandesaker { get; }
}

public class Levandesaker
{
    public bool alive
}

что позволяет вам делать:

public static bool LevandesakerExistsAndAlive(this Rummen r)
{
    return (r.Levandesaker != null && r.Levandesaker.alive);     
}

if (rummen[positionX, positionY].LevandesakerExistsAndAlive())
{
}

обратите внимание, что это предполагает, что вы не контролируете класс Rummen (в противном случае вы могли бы просто сделать его методом или свойством экземпляра и покончить с этим)

Надеюсь, я правильно истолковал этот вопрос!

Массив имеет постоянный размер и содержит значение для каждого индекса от 0 до верхней границы массива.

Поэтому, чтобы проверить, существует ли позиция в массиве, вы можете просто убедиться, что она меньше верхней границы. Что-то вроде этого должно охватывать абсолютно все условия (при условии, что сам Rummen не равен нулю!):

// make sure rummen contains the [positionX, positionY] element
if(rummen.GetUpperBound(0) > positionX && rummen.GetUpperBound(1) > positionY)
{
    if(rummen[positionX, positionY].Levandesaker != null)
    {
        // make sure Levandsaker contains at least one element
        if(rummen[positionX, positionY].Levandsaker.Length > 0)
        {
            if(rummen[positionX, positionY].Levandesaker[0].alive == true)
            {
            }
        }
    }
}

РЕДАКТИРОВАТЬ: Извините, исправлен синтаксис, специфичный для C#. Также добавлена ​​проверка на Левандсакера в демонстрационных целях.