List<T>
has no specific method to do this. The loop is your best option.
However, you can make it more efficient at runtime, by initializing the list with an initial capacity:
var myList = new List<bool>(100);
When using this constructor, the list will internally allocate an array of 100 elements. If you use the default constructor, it will start of with first 0 and then 4 elements. After 4 items have been added, the list will allocate an array of 8 elements and copy the 4 that were already added over. Then it will grow to 16, 32, 64 and finally 128. All these allocations and copy operations can be avoided by using the constructor with the initial capacity.
Alternatively, if you need to do this in different places in your program, you could make an extension method:
public static void Initialize<T>(this List<T> list, T value, int count)
{
if (list == null)
{
throw new ArgumentNullException("list");
}
if (list.Count != 0)
{
throw new InvalidOperationException("list already initialized");
}
if (list.Capacity < count)
{
list.Capacity = count;
}
for (int i = 0, i < count, i++)
{
list.Add(value);
}
}
You would use it like this:
var myList = new List<bool>();
myList.Initialize(false, 100);
The other option that you have is to use an array.
var myList = new bool[100];
The interesting thing about this specific example is that you do not have to initialize the array. Since false
is the default value for bool
, all elements in the array will automatically have the value false
. If your list does not need to resize dynamically, this is certainly an option to consider.