Некромантия: Почему бы не сохранить индексы не нулевых элементов массива?
var itemsCount = 100;
// Исходный массив.
var ArrayTest = new string[itemsCount];
// Количество не нулевых элементов.
var counter = 0;
// Для хранения индексов не нулевых элементов.
var ArrayTestIndex = new int[itemsCount];
for (byte i = 0; i < ArrayTest.Length; ++i)
{
if (i == 4 || i == 56) // Очень сложное условие.
{
ArrayTest[i] = $"Это не нулевой объект #{i}";
// Считаем количество не нулевых элементов.
counter++;
// Сохраняем индекс текущего элемента.
ArrayTestIndex[counter - 1] = i;
}
else
{
ArrayTest[i] = null;
}
}
// Отрезаем пустые элементы в реестре индексов.
Array.Resize(ref ArrayTestIndex, counter);
for (byte i = 0; i < ArrayTestIndex.Length; ++i)
{
// Индекс не нулевого элемента исходного массива.
var index = ArrayTestIndex[i];
// Делаем что хотим.
Console.WriteLine(ArrayTest[index]);
}