
/ Foreach рд▓реВрдк рдЪреБрдирдиреЗ рдХрд╛ рд╕рд╡рд╛рд▓ рджреБрдирд┐рдпрд╛ рдЬрд┐рддрдирд╛ рдкреБрд░рд╛рдирд╛ рд╣реИред рд╣рдо рд╕рднреА рдиреЗ рд╕реБрдирд╛ рд╣реИ рдХрд┐ foreach рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА рд╣реИред рд▓реЗрдХрд┐рди рд╣рд░ рдХреЛрдИ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреНрдпреЛрдВ ... рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реИ?
рдЬрдм рдореИрдВрдиреЗ .NET рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдиреЗ рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдХрд┐ foreach рдХрд┐рд╕реА рдФрдЪрд┐рддреНрдп рдХреЗ рдмрд┐рдирд╛, рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 2 рдЧреБрдирд╛ рдзреАрдорд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд┐рдпрд╛ред рдЕрдм, рдЬрдм рдХрд┐рд╕реА рдХреЗ рд╢рдмреНрдж рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЪрдХреНрд░реЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реВрдВ, рд╕рд╛рде рд╣реА рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рднреА рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реВрдВред
рддреЛ рдЪрд▓рд┐рдП!
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
foreach (var item in Enumerable.Range(0, 128)) { Console.WriteLine(item); }
рдлреЙрд░реНрдЪреНрдпреВрдк рд▓реВрдк рд╡рд╛рдХреНрдп-рд░рдЪрдирд╛ рдЪреАрдиреА рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕реЗ рдирд┐рдореНрди рдХреЛрдб рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИ:
IEnumerator<int> enumerator = Enumerable.Range(0, 128).GetEnumerator(); try { while (enumerator.MoveNext()) { int item = enumerator.Current; Console.WriteLine(item); } } finally { if (enumerator != null) { enumerator.Dispose(); } }
рдпрд╣ рдЬрд╛рдирдХрд░, рдХреЛрдИ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдорд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдлреЙрд░рдЪреЗрдЯ рдХреЛ рдзреАрдорд╛ рдХреНрдпреЛрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП-рдП рдХреЗ рд▓рд┐рдПред рдЬрдм foreach рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
- рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рдИ рдЧрдИ рд╣реИ - рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд;
- рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, MoveNext рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рдХрд░рдВрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдПрдХреНрд╕реЗрд╕ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдПрдХ рдореЗрдердб рдХреЙрд▓ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ;
рд╡рд╣ рд╕рдм рд╣реИ! рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд╣реАрдВ, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ ...
рд╡рд╣рд╛рдБ рдПрдХ рдФрд░ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИ! рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдпрд╛, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕реА # / рд╕реАрдПрд▓рдЖрд░ рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рддреЗрдЬ рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рд╣реИ (рдлрд┐рд░ рднреА, рдореИрдВ рдЗрд╕реЗ рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдФрд░ рдЕрдзрд┐рдХ рдмрджрд▓рд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реВрдВ)ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреВрдВрдХрд┐ рд╕рд░рдгрд┐рдпрд╛рдБ рд╕реАрдПрд▓рдЖрд░ рдореЗрдВ рдЕрддреНрдпрдзрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХреАрдХреГрдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдлрд╝реЙрд░рдЪ рд▓реВрдк рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рдЗрдХрд╛рдИ рдлрд╝реЙрд░рдЪ рд▓реВрдк рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдПрд░рд░реЗрдЯрд┐рдВрдЧ рдПрд░реЗ рдФрд░ рд▓рд┐рд╕реНрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред For-a рдФрд░ foreach-a рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐ Array.ForEach рдХреЗ рд╕рд╛рде-рд╕рд╛рде List.ForEach рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдзрд┐рдпреЛрдВ static double ArrayForWithoutOptimization(int[] array) { int sum = 0; var watch = Stopwatch.StartNew(); for (int i = 0; i < array.Length; i++) sum += array[i]; watch.Stop(); return watch.Elapsed.TotalMilliseconds; } static double ArrayForWithOptimization(int[] array) { int length = array.Length; int sum = 0; var watch = Stopwatch.StartNew(); for (int i = 0; i < length; i++) sum += array[i]; watch.Stop(); return watch.Elapsed.TotalMilliseconds; } static double ArrayForeach(int[] array) { int sum = 0; var watch = Stopwatch.StartNew(); foreach (var item in array) sum += item; watch.Stop(); return watch.Elapsed.TotalMilliseconds; } static double ArrayForEach(int[] array) { int sum = 0; var watch = Stopwatch.StartNew(); Array.ForEach(array, i => { sum += i; }); watch.Stop(); return watch.Elapsed.TotalMilliseconds; }
рд░рд┐рд▓реАрдЬ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓рд┐рдд рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдереЗред рд╕рд░рдгреА рдФрд░ рд╕реВрдЪреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 100,000,000 рд╣реИред рдкрд░реАрдХреНрд╖рдг рдорд╢реАрди рдореЗрдВ рдПрдХ рдЗрдВрдЯреЗрд▓ рдХреЛрд░ i-5 рдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмреЛрд░реНрдб рдкрд░ 8 рдЬреАрдмреА рд░реИрдо рд╣реИред
рд╕рд░рдгрд┐рдпреЛрдВ

рдЖрд░реЗрдЦ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдЙрд╕реА рд╕рдордп рдХреЗ рд▓рд┐рдП / foreach рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХрддрдо рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рдЕрдзрд┐рдХрддрдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реАрдорд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдлреЙрд░рдЪ рд▓реВрдк рдХреЛ рдЦреЛрд▓ рджреЗрддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╣рдо рд▓рдВрдмрд╛рдИ рдХреЛ рдХреИрд╢ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рдЬрдм рдлреЙрд░-рдП рдХреЗ рд╕рд╛рде рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИред
рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдЕрдЬреАрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд▓рдВрдмрд╛рдИ рдХреИрд╢рд┐рдВрдЧ рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЬреЗрдЖрдИрдЯреА рд╕рд░рдгреА рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред рд▓реВрдк рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реАрдорд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрддрд┐ред рдпрд╣ рд▓реВрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╕реАрдорд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЬрд╛рдВрдЪ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдирд╖реНрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдЬрдм рд╣рдо рдПрдХ рдЪрд░ рдХреЛ рдХреИрд╢ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдорд╛рдорд▓рд╛ рдЕрдм рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
Array.ForEach рд╡рд┐рдзрд┐ рдиреЗ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдпрд╛ред рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ:
public static void ForEach<T>(T[] array, Action<T> action) { for (int index = 0; index < array.Length; ++index) action(array[index]); }
рдлрд┐рд░ рдпрд╣ рдЗрддрдиреА рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рд╕рдм рдХреЗ рдмрд╛рдж, рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ, рд╡рд╣ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрд░рд┐ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдоред
рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ рдЬрд╛рдПрдВред
рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдорд╛рди рддреБрд▓рдирд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд╕реВрдЪрд┐рдпреЛрдВ

рдпрд╣рд╛рдБ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рд╣реИ !!!
рдЬрдм рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ / foreach рд▓реВрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рдлрд╝реЙрд░рдЪреИрдЯ рдЗрдЯреНрд░реЗрдЯрд░ рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рд╕реВрдЪреА рдХреА рд▓рдВрдмрд╛рдИ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реВрдЪреА рдЕрдиреБрдХреНрд░рдордг JIT рдЗрдирд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЕрдиреБрдХреНрд░рдордг рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдкрддреНрддрд┐ рд╣реИ)ред
foreach рдиреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 2.5 рдЧреБрдирд╛ рдзреАрдорд╛ рджрд┐рдЦрд╛рдпрд╛ред рдпрд╣ рдЗрд╕рдХреА рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдЬреЛ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдХреЙрд▓рдирдХреНрдиреЗрдХреНрд╕реНрдЯ, рдХрд░рдВрдЯ)ред
List.ForEach рдХреЗ рд╕рд╛рде-рд╕рд╛рде Array.ForEach рдиреЗ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдпрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬреЗрдЖрдИрдЯреА рдЗрдирд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реИрдВ-рдпрд╣ рдЖрднрд╛рд╕реА рддрд░реАрдХреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╣рдореЗрд╢рд╛ рд╡рд╕реНрддреБрддрдГ рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
public void ForEach(Action<T> action) { int num = this._version; for (int index = 0; index < this._size && num == this._version; ++index) action(this._items[index]); if (num == this._version) return; ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_EnumFailedVersion); }
рдпрд╣рд╛рдВ, рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдпрд╣ рднреА рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕реВрдЪреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рджреМрд░рд╛рди рдмрджрд▓ рдЧрдИ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рд╣реИ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, ForEach рдкрджреНрдзрддрд┐ рд╕реНрдерд┐рд░ рд╣реИ, рдЬрдмрдХрд┐ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд╕реВрдЪреА рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рд░рдгреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП, ForEach рдкрджреНрдзрддрд┐ рдЗрдВрдбреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рд░рдгреА рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реВрдЪрдХрд╛рдВрдХ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдИ рдЧреБрдирд╛ рддреЗрдЬ рд╣реИред
рд╡реАрдЖрд░ рд▓рд┐рд╕реНрдЯреНрд╕ рдХреЛ рдЕрд░реЗрдЬ рдХрд░рддрд╛ рд╣реИ

рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛
- рд▓реВрдк рдХреЗ рд▓рд┐рдП (рд▓рдВрдмрд╛рдИ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛) рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝реЙрд░реНрдЪ рд▓рдВрдмрд╛рдИ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝реА рддреЗрдЬрд╝реА рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ;
- Array.ForEach рд▓реВрдк рдХреЗ рд▓рд┐рдП / foreach рдЫреЛрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ рдЫрд╣ рдЧреБрдирд╛ рдзреАрдорд╛ рд╣реИ;
- рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ (рд▓рдВрдмрд╛рдИ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛) рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 3 рдЧреБрдирд╛ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ;
- рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ (рд▓рдВрдмрд╛рдИ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде) рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ 2 рдЧреБрдирд╛ рдзреАрдорд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ;
- рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ рдлреЙрд░реНрдЪреВрдирди рд▓рдЧрднрдЧ 6 рдмрд╛рд░ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдлреЙрд░реНрдЪ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛ рд╣реИ;
рдкреБрд░рд╕реНрдХрд╛рд░ рд╡рд┐рдЬреЗрддрд╛рдУрдВ
рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ:

рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ:

рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк рдХреИрд╕реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд▓реЗрдЦ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ред рдЦрд╛рд╕рдХрд░ рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ foreach рд▓рдВрдмрд╛рдИ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬ рд╣реИред рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП JIT рдХреЛ рдзрдиреНрдпрд╡рд╛рджред рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдлреЙрд░рдЪ-рдлреЙрд░ рдП рдлреИрдХреНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА рд╣реИред
рдЖрдЬ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдХреЗ рд╕рд╛рде, рдлрд╝реЙрд░рдЪ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдлрд╝реЙрд░-рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛ рд╣реИ, рд╢рд╛рдпрдж, рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдЕрдзрд┐рдХ рдШреЛрд╖рд┐рдд рджрд┐рдЦрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╕рдВрднрд╡рддрдГ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд░реАрдпрддрд╛ рджреЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред