Если массив пуст, похоже, вы не можете проверить его длину, используя ".length". Каков наилучший способ проверить, пуст ли массив?
Если (Array.Length == 0)
Ответ 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