Можно ли использовать Object Initializer на bool? - PullRequest
4 голосов
/ 27 февраля 2010

Можно ли сделать следующее (например, инициализировать массив bool и установить для всех элементов значение true) в одну строку, используя инициализаторы объектов?

int weeks = 5;
bool[] weekSelected = new bool[weeks];
for (int i = 0; i < weeks; i++)
{
    weekSelected[i] = true;
}

Я не могу заставить его работать.


Изменить: я должен был упомянуть, что я использую VS2008 с .NET 2.0 (поэтому Enumerable не будет работать).

Ответы [ 3 ]

9 голосов
/ 27 февраля 2010

bool[] weekSelected = Enumerable.Range(0, 5).Select(i => true).ToArray();

РЕДАКТИРОВАТЬ: Если вы не можете использовать перечислимые, вы можете использовать BitArray :

BitArray bits = new BitArray(count, true);

, а затем скопируйте в массив при необходимости:

bool[] array = new bool[count];
bits.CopyTo(array, 0);
3 голосов
/ 27 февраля 2010

Если вы используете .NET 2.0, использование цикла является правильным способом сделать это. Я бы этого не изменил.


Оригинальный ответ.

Ваше объявление типа неверно. Попробуйте это:

bool[] weekSelected = new bool[] { true, true, true, true, true };

Вы также можете сделать это, чтобы избежать повторения:

bool[] weekSelected = Enumerable.Repeat(true, 5).ToArray();

Обратите внимание, что это не так эффективно, как цикл, но если вы скажете, что 100 значений и производительность не критична, это более кратко, чем цикл, и меньше набирает, чем { true, true, true, ... }.

2 голосов
/ 27 февраля 2010

Это должно быть то, что вы ищете:

bool[] weekSelected = Enumerable.Repeat<bool>(true, weeks).ToArray();
...