Да, это вызовет много бокса. Однако в большинстве случаев я бы не ожидал, что это ухудшит производительность слишком . Это раздражает, но я сомневаюсь, что многие приложения реального мира тратят значительное количество времени на упаковку / распаковку (или очистку ящиков впоследствии, что, конечно же, является другой ценой). Вероятно, стоит проверить это, прежде чем предпринимать какие-либо большие усилия, чтобы избежать этого.
Вы можете написать свой собственный итератор довольно легко, хотя ... особенно если вам не важно ломаться, если "версия" изменится. Например:
public static IEnumerable<bool> EnumerateBitArray(BitArray bitArray)
{
for (int i=0; i < bitArray.Length; i++)
{
yield return bitArray[i];
}
}
Плохие вещи почти наверняка произойдут, если вы сделаете измените массив во время итерации - особенно если вы измените длину!