Существует ли индекс массива - PullRequest
68 голосов
/ 27 апреля 2009

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

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

Пример - мне нужно проверить, существует ли массив [25].

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

Есть ли способ сделать это, или я застрял в цикле foreach?

Ответы [ 11 ]

122 голосов
/ 27 апреля 2009

Проверка длины

int index = 25;
if(index < array.length)
{
    //it exists
}
70 голосов
/ 31 декабря 2015

Вы также можете использовать LINQ для достижения этого:

var exists = array.ElementAtOrDefault(index) != null;
16 голосов
/ 27 апреля 2009

Что именно вы подразумеваете под "является допустимым элементом"? Вы можете просто сделать:

if (array.Length >= 26)

, который скажет вам, является ли 25 допустимым индексом в массиве или нет (при условии, что нижняя граница равна 0).

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

if (array[25] != null)

(или их комбинация).

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

9 голосов
/ 27 апреля 2009

При условии, что вы также хотите проверить, не равен ли элемент нулю

if (array.Length > 25 && array[25] != null)
{
    //it exists
}
2 голосов
/ 24 января 2014
// I'd modify this slightly to be more resilient to a bad parameter
// it will handle your case and better handle other cases given to it:

int index = 25;

if (index >= 0 && index < array.Length)
{
    // Array element found
}
1 голос
/ 27 апреля 2009

array.length скажет вам, сколько элементов в массиве

1 голос
/ 27 апреля 2009

Вы можете использовать Список, чтобы проверить существование.

List<int> l = new List<int>();
l.Add(45);
...
...

if (l.Count == 25) {
  doStuff();
}
int num = 45;
if (l.Contains(num)) {
  doMoreStuff();
}
1 голос
/ 27 апреля 2009

Вы можете использовать длину массива и посмотреть, подходит ли ваше произвольное число в этот диапазон. Например, если у вас есть массив размером 10, то массив [25] недопустим, потому что 25 не меньше 10.

0 голосов
/ 28 апреля 2009

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

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

0 голосов
/ 27 апреля 2009

Вы можете проверить длину массива, чтобы увидеть, допустим ли элемент 25 в смысле нахождения в массиве, тогда вы можете использовать

if (array.Length > 25)
{ 
   if (array[25] != null)
   {
       //good
   }
}

чтобы узнать, был ли установлен сам элемент массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...