Я унаследовал код на работе, от которого действительно плохо пахнет. Я надеюсь найти самое безболезненное решение.
Есть ли способ проверить, является ли какое-то произвольное число допустимым элементом в массиве?
Пример - мне нужно проверить, существует ли массив [25].
Я бы предпочел сделать это, не выполняя foreach () через массив, чтобы найти строки.
Есть ли способ сделать это, или я застрял в цикле foreach?
Ответы:
Проверить длину
int index = 25; if(index < array.Length) { //it exists }
источник
Вы также можете использовать LINQ для этого:
var exists = array.ElementAtOrDefault(index) != null;
источник
new object[]{ null }.ElementAtOrDefault(index)
вернется,null
поскольку элемент в 0 имеет значениеnull
. ИспользованиеElementAtOrDefault
не является отличным решением для проверки индексов массивов существуют , что проверка равенства добавляется в конце делает результаты неопределимыми.array.Length > index
.Что именно вы подразумеваете под «действительным элементом»? Вы могли просто сделать:
if (array.Length >= 26)
который скажет вам, является ли 25 допустимым индексом в массиве или нет (при условии, что нижняя граница 0).
Если вам нужно знать, не является ли он нулевым или нет, просто используйте:
if (array[25] != null)
(или их комбинация).
Если это не помогает, дайте более точное значение слова «действительный» для вашей проблемы.
источник
Index was outside the bounds of the array
Предполагая, что вы также хотите проверить, не является ли элемент не нулевым
if (array.Length > 25 && array[25] != null) { //it exists }
источник
&&
вif (array.Length > 25 && array[25] != null)
, если использование одного&
бросит IndexOutOfRange исключение. MSDN .// 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 }
источник
Вы можете использовать длину массива и посмотреть, подходит ли ваше произвольное число в этот диапазон. Например, если у вас есть массив размером 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(); }
источник
array.length
скажет вам, сколько элементов в массивеисточник
Вы можете проверить, меньше ли индекс длины массива. Это не проверяет наличие нулей или других нечетных случаев, когда индексу может быть присвоено значение, но оно не было задано явно.
источник
Вы можете проверить длину массива, чтобы убедиться, что элемент 25 действителен в том смысле, что он находится в массиве, тогда вы можете использовать
if (array.Length > 25) { if (array[25] != null) { //good } }
чтобы увидеть, был ли установлен сам элемент массива.
источник
Похоже, вы используете массив для хранения разных полей. Это определенно запах кода. Я бы по возможности избегал использования массивов, поскольку они обычно не подходят (или не нужны) в высокоуровневом коде.
В краткосрочной перспективе переход на простой Словарь может оказаться приемлемым вариантом. Как и при использовании класса большой сумки. Вариантов много. Проблема, которая у вас возникла сейчас, - это всего лишь симптом плохого дизайна, вам следует обратить внимание на устранение основной проблемы, а не просто на исправление плохого дизайна, так что на данный момент это вроде как в основном работает.
источник