Если я буду массив в цикле на 1 увеличивать (прибавлять 1 элемент) у меня что аллокация будет каждый раз?
List<T>
- в нём находится массив, длина которого изменяется логарифмически. var list = new List<int>();
for (int i = 1; i <= 20; i++)
{
list.Add(i);
Console.WriteLine("{0}: {1}", i, list.Capacity);
}
1: 4
2: 4
3: 4
4: 4
5: 8
6: 8
7: 8
8: 8
9: 16
10: 16
11: 16
12: 16
13: 16
14: 16
15: 16
16: 16
17: 32
18: 32
19: 32
20: 32
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
<Style TargetType="Button">
<Setter Property="Margin" Value="0 0 10 0"/>
<Setter Property="Width" Value="100"/>
</Style>
</StackPanel.Resources>
<Button Content="Кнопка 1" Command="{Binding CustomButtonCommand}" CommandParameter="Btn1"/>
<Button Content="Кнопка 2" Command="{Binding CustomButtonCommand}" CommandParameter="Btn2"/>
<Button Content="Кнопка 3" Command="{Binding CustomButtonCommand}" CommandParameter="Btn3"/>
<Button Content="OK" Command="{Binding OkButtonCommand}"/>
<Button Content="Отмена" Command="{Binding CancelButtonCommand}"/>
</StackPanel>
foreach использует IEnumerator, который создаётся при запуске foreach. Если массив изменится в цикле, то количество итераций цикла не изменится. Попробуйте сами, это полезно попробовать и увидеть в дебаггере:
В первом и во втором варианте длина массива окажется 20, кол-во итераций и там, и там 10.
В первом варианте создаётся новый массив, в результате в массиве будет установлен только элемент m[9], во втором будут установлены элементы от 0 до 9.
Вы расскажите, что вы хотите сделать. Длину массива очень редко приходится изменять, если такое нужно, то обычно используется список.