Как стать автором
Обновить

Интересные моменты, которые вы, возможно, не знали о C# (Array)

Время на прочтение 1 мин
Количество просмотров 53K
В продолжении статьи «8 фактов, которые вы, возможно, не знали о C#» описывающей интересные моменты языка C#, представляю крохотный очерк. Очень жаль, что некоторые воспринимают такие статьи как “капитанство” отбивая всякое желание к написанию, но несмотря на это, в комментариях, порой, всплывает много полезной информации.

Итак, что возвращают функции поиска индекса в массивах, если элемент не найден?


Предположим у нас есть метод возвращающий Array:
Array GetArray() { return … }


И код который ищет в нем число:
Array array = GetArray();
int index = Array.IndexOf(array, 42);
if (index != -1)
{
	// do something
}


Все знакомо и привычно, но сверившись с документацией, с удивлением обнаруживаем что методы IndexOf(Array ...), в случае не нахождения элемента возвращают не -1, а нижнюю границу массива - 1.

Отсюда вытекает два вывода:
1. Можно создать массив начинающийся не с 0.
2. Код выше некорректен.

Пример создания массива не с 0:
Array array = Array.CreateInstance(typeof(int), new int[] { 3 }, new int[] { -1 });

В этом примере создается массив из трех элементов, индексация начинается с -1.

Правильный код выглядит следующим образом:
Array array = GetArray();
int index = Array.IndexOf(array, 42);
if (index != (array.GetLowerBound(0) - 1))
{
	// do something
}


Я думаю эта особенность создана для языков платформы .NET где индексация начинается с 1.

Помимо этого, в документации описан отдельный случай, когда нижняя граница равна int.MinValue. В этом случае метод IndexOf вернет int.MaxValue что соотвествует int.MinValue - 1 (переполнение).

Всем спасибо за внимание!

Теги:
Хабы:
+38
Комментарии 35
Комментарии Комментарии 35

Публикации

Истории

Работа

Ближайшие события

PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн
Weekend Offer в AliExpress
Дата 20 – 21 апреля
Время 10:00 – 20:00
Место
Онлайн