Существует ли индекс массива
я унаследовал некоторый код на работе, который имеет очень плохой запах. Я надеюсь найти наиболее безболезненное решение.
есть ли способ проверить, является ли некоторое произвольное число допустимым элементом в массиве?
пример-мне нужно проверить, существует ли массив[25].
предпочтительно я предпочел бы сделать это, не делая foreach() через массив, чтобы найти строки.
есть ли способ сделать это, или я застрял с помощью цикла foreach?
11 ответов:
вы можете использовать LINQ для достижения этого тоже:
var exists = array.ElementAtOrDefault(index) != null;
что именно вы подразумеваете под "допустимым элементом"? Вы могли бы просто сделать:
if (array.Length >= 26)
который скажет вам, является ли 25 допустимым индексом в массиве или нет (предполагая нижнюю границу 0).
Если вам нужно знать, является ли он ненулевым или нет, просто используйте:
if (array[25] != null)
(или их сочетание).
Если это не помогает, пожалуйста, дайте более точное значение "действительный" для вашей проблемы.
предполагая, что вы также хотите проверить, не является ли элемент null
if (array.Length > 25 && array[25] != null) { //it exists }
вы можете использовать длину массива и посмотреть, подходит ли ваше произвольное число в этом диапазоне. Например, если у вас есть массив размером 10, то array[25] недопустим, потому что 25 не меньше 10.
вы можете использовать список, так что вы можете проверить наличие.
List<int> l = new List<int>(); l.Add(45); ... ... if (l.Count == 25) { doStuff(); } int num = 45; if (l.Contains(num)) { doMoreStuff(); }
// 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 }
вы можете проверить, если индекс меньше длины массива. Это не проверяет наличие нулей или других нечетных случаев, когда индексу может быть присвоено значение, но не было дано явно.
вы можете проверить длину массива, чтобы увидеть, если элемент 25 является допустимым в смысле нахождения в массиве, то вы могли бы использовать
if (array.Length > 25) { if (array[25] != null) { //good } }
чтобы увидеть, был ли установлен сам элемент массива.
Это звучит очень похоже на то, что вы используете массив для хранения разных полей. Это определенно кодовый запах. Я бы избегал использовать массивы как можно больше, поскольку они обычно не подходят (или необходимы) в коде высокого уровня.
переключение на простой словарь может быть работоспособным вариантом в краткосрочной перспективе. Как бы используя большой класс сумка. Есть много вариантов. Проблема, которую вы сейчас имеете, - это просто симптом плохого дизайна, вы должны посмотреть на исправление основной проблемы вместо того, чтобы просто исправлять плохой дизайн, так что это своего рода, в основном работает, на данный момент.