﻿
{"id":5480,"date":"2016-12-21T07:23:46","date_gmt":"2016-12-21T07:23:46","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=5480"},"modified":"2016-12-21T07:23:46","modified_gmt":"2016-12-21T07:23:46","slug":"cta-collection-was-modified-enumeration-operation-may-not-execute-hatasi-ve-cozumu","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cta-collection-was-modified-enumeration-operation-may-not-execute-hatasi-ve-cozumu\/","title":{"rendered":"C#&#8217;ta &#8220;Collection Was Modified; Enumeration Operation May Not Execute.&#8221; Hatas\u0131 ve \u00c7\u00f6z\u00fcm\u00fc"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Yaz\u0131l\u0131m d\u00fcnyas\u0131n\u0131n temeli ve prosed\u00fcrel programlaman\u0131n has elemanlar\u0131ndan biri olan d\u00f6ng\u00fc yap\u0131lar\u0131 \u00fczerinde yap\u0131lan \u00e7al\u0131\u015fmalarda farkl\u0131 olas\u0131 hatalar alman\u0131z gayet normal bir durumdur. Bu hatalar\u0131n onlarca farkl\u0131 sebebi olabilmekle beraber, d\u00f6ng\u00fc kal\u0131b\u0131n\u0131n ba\u015flang\u0131\u00e7 olarak belirledi\u011fi temel de\u011ferlerle iterasyon s\u00fcrecindeki de\u011fi\u015fikliklerin birbirlerine tezatl\u0131k \u00e7\u0131karmas\u0131ndan kaynaklanabilmeside muhtemeldir. \u0130\u015fte bizde bu yaz\u0131m\u0131zda buna benzer bir durumdan kaynaklanan hata \u00fczerine odaklanacak ve \u00e7\u00f6z\u00fcm yolu sunaca\u011f\u0131z.<\/p>\n<p>Hi\u00e7 vakit kaybetmeden a\u015fa\u011f\u0131daki \u00f6rnek kod bloklar\u0131n\u0131 inceleyelim ve ald\u0131klar\u0131 hata \u00fczerine konu\u015fal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            List&lt;int&gt; Sayilar = new List&lt;int&gt; { 1, 3, 5, 7, 9, 11, 13, 17 };\r\n            Sayilar.ForEach(s =&gt; Sayilar.Remove(s));\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            List&lt;int&gt; Sayilar = new List&lt;int&gt; { 1, 3, 5, 7, 9, 11, 13, 17 };\r\n            foreach (var sayi in Sayilar)\r\n                Sayilar.Remove(sayi);\r\n<\/pre>\n<p>Bu iki \u00f6rnek kodumuzda maksad\u0131m\u0131z foreach d\u00f6ng\u00fcs\u00fcn\u00fcn kullan\u0131m varyasyonlar\u0131n\u0131 g\u00f6zler \u00f6n\u00fcne getirmektir. E\u011fer ki bir foreach d\u00f6ng\u00fcs\u00fcn\u00fc, d\u00f6ng\u00fc sonlanmadan ba\u011fl\u0131 oldu\u011fu koleksiyon i\u00e7erisinden veri silerek kullanmaya \u00e7al\u0131\u015f\u0131rsak konumuz olan hatayla kar\u015f\u0131la\u015fmam\u0131z olduk\u00e7a muhtemeldir.<\/p>\n<p>Ald\u0131\u011f\u0131m\u0131z hata metinsel olarak a\u015fa\u011f\u0131daki gibidir.<\/p>\n<blockquote>\n<p style=\"text-align: center;\"><span style=\"color: #ff0000;\"><em><strong>System.InvalidOperationException: &#8216;Collection was modified; enumeration operation may not execute.&#8217;<\/strong><\/em><\/span><\/p>\n<\/blockquote>\n<p>Bu hata biraz yukar\u0131da bahsetti\u011fim gibi foreach d\u00f6ng\u00fcs\u00fcn\u00fcn kulland\u0131\u011f\u0131 koleksiyonun i\u00e7eri\u011fi de\u011fi\u015fti\u011finden dolay\u0131 i\u015fleme devam edilememesinin bir tezah\u00fcr\u00fcd\u00fcr.<\/p>\n<p>Bu hatadan kurtulman\u0131n bir ka\u00e7 farkl\u0131, algoritmik temellere dayanan yollar\u0131 vard\u0131r. \u015eimdi gelin bu yollar\u0131 inceleyelim.<\/p>\n<p><strong>1. Yol<\/strong><br \/>\nforeach de\u011fil, for yahut di\u011fer prosed\u00fcrel d\u00f6ng\u00fcleri kullanman\u0131z hatay\u0131 ortadan kald\u0131racakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            List&lt;int&gt; Sayilar = new List&lt;int&gt; { 1, 3, 5, 7, 9, 11, 13, 17 };\r\n            for (int i = 0; i &lt; Sayilar.Count; i++)\r\n                if(Sayilar&#x5B;i] == 3)\r\n                Sayilar.Remove(Sayilar&#x5B;i]);\r\n<\/pre>\n<p><strong>2. Yol<\/strong><br \/>\n2. yol olarak a\u015fa\u011f\u0131daki gibi algoritmik \u00e7al\u0131\u015fma yapmam\u0131z yeterli olacakt\u0131r. Burada foreach d\u00f6ng\u00fcs\u00fcn\u00fcn kulland\u0131\u011f\u0131 koleksiyondan, as\u0131l i\u015flem yap\u0131lacak koleksiyon soyutland\u0131r\u0131lm\u0131\u015ft\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            List&lt;int&gt; Sayilar = new List&lt;int&gt; { 1, 3, 5, 7, 9, 11, 13, 17 };\r\n            List&lt;int&gt; SilinecekSayilar = new List&lt;int&gt;() { 1, 3, 5, 7 };\r\n            SilinecekSayilar.ForEach(s =&gt;\r\n            {\r\n                if (Sayilar.Contains(s))\r\n                    Sayilar.Remove(s);\r\n            });\r\n<\/pre>\n<p>Evet&#8230; Anlayaca\u011f\u0131n\u0131z foreach d\u00f6ng\u00fclerinde kullan\u0131lan kaynak koleksiyon yap\u0131lar\u0131n\u0131n i\u00e7erikleri olduk\u00e7a \u00f6nem arz etmektedir. Bir iterat\u00f6r mant\u0131\u011f\u0131yla \u00e7al\u0131\u015fan foreach d\u00f6ng\u00fcs\u00fc kayna\u011f\u0131ndaki de\u011fi\u015fim esnas\u0131nda iterasyondaki devaml\u0131l\u0131\u011f\u0131 getirmekte sorunlar ya\u015famakta ve bu hatay\u0131 f\u0131rlatmaktad\u0131r.<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u015eimdilik ho\u015f\u00e7akal\u0131n&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Yaz\u0131l\u0131m d\u00fcnyas\u0131n\u0131n temeli ve prosed\u00fcrel programlaman\u0131n has elemanlar\u0131ndan biri olan d\u00f6ng\u00fc yap\u0131lar\u0131 \u00fczerinde yap\u0131lan \u00e7al\u0131\u015fmalarda farkl\u0131 olas\u0131 hatalar alman\u0131z gayet normal bir durumdur. Bu hatalar\u0131n onlarca farkl\u0131 sebebi olabilmekle beraber, d\u00f6ng\u00fc kal\u0131b\u0131n\u0131n ba\u015flang\u0131\u00e7&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":3014,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,258],"tags":[27,1576,260,484,1561,1042],"class_list":["post-5480","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","category-hata-cozumleri","tag-c","tag-c-hata","tag-hata","tag-hata-cozumu","tag-hata-ve-cozumleri","tag-iterasyon"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5480","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=5480"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5480\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3014"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=5480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=5480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=5480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}