Подтвердить что ты не робот

Если (Array.Length == 0)

Если массив пуст, похоже, вы не можете проверить его длину, используя ".length". Каков наилучший способ проверить, пуст ли массив?

4b9b3361

Ответ 1

Вы можете абсолютно проверить длину пустого массива. Однако, если вы попытаетесь сделать это по нулевой ссылке, вы получите исключение. Я подозреваю, что вы столкнулись. Вы можете справиться с обоими, хотя:

if (array == null || array.Length == 0)

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

Ответ 2

Да, для безопасности я бы, вероятно, сделал:

if(array == null || array.Length == 0)

Ответ 3

Вы можете использовать

if (array == null || array.Length == 0)

ИЛИ

if (!(array != null && array.Length >= 0))

ПРИМЕЧАНИЕ !!!!! Чтобы убедиться, что c # будет правильно реализовывать короткое замыкание; Вы должны сравнить этот объект с NULL, прежде чем перейти к дочерним объектам сравнения объекта.

С# 7.0 и выше

if(!array?.Length >= 0)

Ответ 4

Вы можете использовать .Length == 0, если длина пуста и массив существует, но уверены ли вы, что он не null?

Ответ 5

Это лучший способ. Обратите внимание, что Array - это объект в NET, поэтому вам нужно проверить значение null раньше.

Ответ 6

Как уже указывалось, вы, вероятно, получаете NullReferenceException, которого можно избежать, сначала проверив, есть ли ссылка null. Однако вам нужно спросить себя, действительно ли это проверка. Будете ли вы делать это, потому что ссылка действительно может быть null, а null имеет особое значение в вашем коде? Или вы делаете это, чтобы скрыть ошибку? Природа вопроса заставляет меня поверить, что это будет последнее. В этом случае вам действительно нужно подробно изучить код и выяснить, почему эта ссылка не была правильно инициализирована в первую очередь.

Ответ 7

Джон Скит ответил правильно. Просто помните, что порядок проведения теста в "IF" важен. Проверьте null до длины. Я также предпочитаю ставить null слева от равенства, что является привычкой, которую я получил от Java, что сделало код более эффективным и быстрым… Я не думаю, что это важно во многих приложениях сегодня, но это хорошая практика!

if (null == array || array.Length == 0)

Ответ 8

Если array - null, попытка устранения array.Length будет вызывать NullReferenceException. Если ваш код считает null недопустимым значением для array, вы должны отклонить его и обвинить вызывающего. Один из таких шаблонов - бросить ArgumentNullException:

void MyMethod(string[] array)
{
    if (array == null) throw new ArgumentNullException(nameof(array));

    if (array.Length > 0)
    {
        // Do something with array…
    }
}

Если вы хотите принять массив null как указание не делать что-либо или как необязательный параметр, вы можете просто не обращаться к нему, если оно равно null:

void MyMethod(string[] array)
{
    if (array != null)
    {
        // Do something with array here…
    }
}

Если вы хотите не касаться array, когда это либо null, либо имеет нулевую длину, тогда вы можете проверить оба одновременно с Оператор С# -6s с нулевым коалесцентом.

void MyMethod(string[] array)
{
    if (array?.Length > 0)
    {
        // Do something with array…
    }
}

Проверка избыточной длины

Кажется странным, что вы обрабатываете пустой массив как особый случай. Во многих случаях, если вы, например, просто перейдете через массив в любом случае, нет необходимости рассматривать пустой массив как особый случай. foreach (var elem in array) {«body»} просто не выполнит «body», когда array.Length будет 0. Если вы относитесь к array == null || array.Length == 0 специально, например, к повышению производительности, вы можете оставить комментарий для потомков. В противном случае проверка на Length == 0 представляется излишней.

Избыточный код усложняет понимание программы, потому что люди, читающие код, предположительно предполагают, что каждая строка необходима для решения какой-либо проблемы или достижения правильности. Если вы включите ненужный код, читатели собираются потратить навсегда попытку выяснить, почему эта строка была или была необходима, прежде чем удалять ее; -).

Ответ 9

Ваш предлагаемый тест в порядке, если массив иналинизирован...

Martin.

Ответ 10

if (array.length > 0)

Ответ 11

проверьте, является ли массив первым в null, поэтому вы избегаете исключения с нулевым указателем.

логика на любом языке: если массив имеет значение null или пусто: do....

Ответ 12

Вы имеете в виду пустую или нулевую, две разные вещи,

если массив создается, но пуст, длина верна, если она не была создана, тогда проверка vs null