﻿
{"id":5788,"date":"2017-03-24T10:08:10","date_gmt":"2017-03-24T10:08:10","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=5788"},"modified":"2017-03-24T10:08:10","modified_gmt":"2017-03-24T10:08:10","slug":"cta-ienumerable-ve-ienumerator-interfaceleri-nedir-ve-nasil-kullanilir","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cta-ienumerable-ve-ienumerator-interfaceleri-nedir-ve-nasil-kullanilir\/","title":{"rendered":"C#&#8217;ta IEnumerable ve IEnumerator Interfaceleri Nedir? ve Nas\u0131l Kullan\u0131l\u0131r?"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>C#&#8217;ta koleksiyon yahut array yap\u0131lar\u0131 \u00fczerinde periyodik bir d\u00fczende d\u00f6nmemizi ve verileri bu \u015fekilde tek tek elde etmemizi sa\u011flayan foreach d\u00f6ng\u00fcs\u00fcn\u00fcn temel \u00e7al\u0131\u015fma prensibi olan iterasyon mant\u0131\u011f\u0131n\u0131n kendi s\u0131n\u0131flar\u0131m\u0131z \u00fczerinde nas\u0131l uygulanaca\u011f\u0131n\u0131 inceleyece\u011fiz. Biliyorsunuz ki C#&#8217;ta <a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-iterator-kavrami-ve-yield-anahtar-sozcugu\/\" target=\"_blank\">iterasyon<\/a> dendi\u011finde akla ilk olarak foreach d\u00f6ng\u00fcs\u00fc gelmektedir. Yani, bir s\u0131n\u0131fa iterasyon \u00f6zelli\u011fi kazand\u0131rabilirsek foreach d\u00f6ng\u00fcs\u00fc bu s\u0131n\u0131fla etkile\u015fime girebilecek iterasyonun periyoduna g\u00f6re ilgili s\u0131n\u0131f i\u00e7erisinde belirlenen i\u015flemleri ger\u00e7ekle\u015ftirecek. Bir s\u0131n\u0131fa iterasyon \u00f6zelliklerini kazand\u0131rmak i\u00e7in gereken t\u00fcm \u00f6zellikler <strong><em>IEnumerator<\/em><\/strong> interface&#8217;i arac\u0131l\u0131\u011f\u0131yla elde edilebilmektedir. <strong><em>IEnumerable<\/em><\/strong> interface&#8217;i ise bir s\u0131n\u0131fa foreach mekanizmas\u0131 taraf\u0131ndan tan\u0131nmas\u0131 i\u00e7in gerekli yetenekleri\/nitelikleri kazand\u0131r\u0131r. Yani enumerator yap\u0131s\u0131n\u0131&#8230; \u015eimdi gelin bu iki interface yap\u0131s\u0131n\u0131 detayl\u0131ca irdeleyerek, nas\u0131l kullan\u0131ld\u0131klar\u0131na de\u011finelim.<\/p>\n<p>\u015eimdi her\u015feyi en temelden ele alarak anlatmaya ba\u015flayal\u0131m.<\/p>\n<p>Hani koleksiyonlarda kulland\u0131\u011f\u0131m\u0131z &#8220;List&#8221; gibi, &#8220;Dictionary&#8221; gibi referanslardan \u00fcretilen nesneler direkt olarak foreach d\u00f6ng\u00fcs\u00fcne verilebilmektedir. \u00d6yne de\u011fil mi?<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            List&lt;string&gt; Isimler = new List&lt;string&gt;();\r\n            Isimler.Add(&quot;Gen\u00e7ay&quot;);\r\n            Isimler.Add(&quot;Nurg\u00fcl&quot;);\r\n            Isimler.Add(&quot;Ay\u015fe&quot;);\r\n            Isimler.Add(&quot;Fatih&quot;);\r\n            Isimler.Add(&quot;Ilgaz&quot;);\r\n\r\n            foreach (var isim in Isimler)\r\n                Console.WriteLine(isim);\r\n\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p>Bak\u0131n Isimler referans\u0131nda bir List nesnesi olu\u015fturdum ve bu nesneyi i\u015faret eden referans\u0131 foreach d\u00f6ng\u00fcs\u00fcnde verdi\u011fim vakit s\u0131k\u0131nt\u0131s\u0131z \u00e7al\u0131\u015fmaktad\u0131r.<\/p>\n<p>Eee&#8230; Peki \u00f6rne\u011fin &#8220;Personeller&#8221; isminde bir s\u0131n\u0131f olu\u015ftursak. Bunu direkt olarak foreach d\u00f6ng\u00fcs\u00fcne verebiliyor muyuz?<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r..png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5795\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r..png\" alt=\"C#'ta IEnumerable ve IEnumerator Interfaceleri Nedir? ve Nas\u0131l Kullan\u0131l\u0131r?\" width=\"378\" height=\"297\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r..png 378w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-300x236.png 300w\" sizes=\"auto, (max-width: 378px) 100vw, 378px\" \/><\/a><br \/>\nHay\u0131r&#8230; <strong><em>Neden?<\/em><\/strong><br \/>\n\u00c7\u00fcnk\u00fc, yazm\u0131\u015f oldu\u011fumuz s\u0131n\u0131f\u0131m\u0131z\u0131 foreach d\u00f6ng\u00fcs\u00fcn\u00fcn istedi\u011fi \u015fartlarda yap\u0131land\u0131rmad\u0131\u011f\u0131m\u0131z i\u00e7in. foreach d\u00f6ng\u00fcs\u00fc bir s\u0131n\u0131f \u00fczerinde \u00e7al\u0131\u015facaksa o s\u0131n\u0131f\u0131n kesinlikle ve kesinlikle i\u00e7erisinde geriye IEnumerator d\u00f6nd\u00fcren <em>GetEnumerator<\/em> metodunun bulunmas\u0131n\u0131 ister. Tek \u015fart\u0131 budur.<\/p>\n<p><iframe loading=\"lazy\" src=\"https:\/\/www.youtube.com\/embed\/HNokfpTEyU4\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>Videodan da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi GetEnumerator metodu s\u0131n\u0131f i\u00e7erisine eklendi\u011finde foreach d\u00f6ng\u00fcs\u00fc ilgili s\u0131n\u0131f\u0131n nesnesini kabul etmektedir.<\/p>\n<blockquote><p><strong>Peki nedir bu GetEnumerator metodu?<\/strong><br \/>\nGetEnumerator metodu, bir s\u0131n\u0131fa iterasyon yap\u0131lar\u0131n\u0131 kazand\u0131racak \u00f6zellikleri bar\u0131nd\u0131ran IEnumerator nesnesi d\u00f6nen bir metotdur.<\/p><\/blockquote>\n<p>\u0130\u015fte o y\u00fczden foreach bu metodu g\u00f6rd\u00fc\u011f\u00fc anda ilgili s\u0131n\u0131f\u0131n bir iterasyon mant\u0131\u011f\u0131yla \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnmekte ve kabul etmektedir. Velhas\u0131l birazdan bu metodun detaylar\u0131na gelece\u011fiz.<\/p>\n<p>\u015eimdi kald\u0131\u011f\u0131m\u0131z yerden devam edelim.<\/p>\n<p>Metodumuzun i\u00e7erisine GetEnumerator metodunu ekledikten sonra direkt olarak foreach d\u00f6ng\u00fcs\u00fcnde ilgili s\u0131n\u0131f\u0131m\u0131z\u0131 \u00e7al\u0131\u015ft\u0131ramayaca\u011f\u0131z. Bunun sebebi, s\u0131n\u0131f\u0131m\u0131z i\u00e7erisinde hangi veri toplulu\u011fu \u00fczerinde i\u015flem yap\u0131laca\u011f\u0131n\u0131n belirlenmi\u015f olmamas\u0131d\u0131r. Ayriyetten GetEnumerator metodu i\u00e7erisinde de bir enumerator nesnesi d\u00f6nmemiz gerekecektir.<\/p>\n<p>O halde hemen eksikliklerimizi tamamlayal\u0131m&#8230;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Personel\r\n    {\r\n        public int Id { get; set; }\r\n        public string Adi { get; set; }\r\n        public string SoyAdi { get; set; }\r\n    }\r\n\r\n    class Personeller\r\n    {\r\n        List&lt;Personel&gt; PersonelListesi = new List&lt;Personel&gt;();\r\n        public void Add(Personel p)\r\n        {\r\n            PersonelListesi.Add(p);\r\n        }\r\n        public IEnumerator GetEnumerator()\r\n        {\r\n            return PersonelListesi.GetEnumerator();\r\n        }\r\n    }\r\n<\/pre>\n<p>\u00d6rne\u011fimizde bir &#8220;Personel&#8221; s\u0131n\u0131f\u0131 olu\u015fturup, &#8220;Personeller&#8221; s\u0131n\u0131f\u0131 i\u00e7erisinde ilgili s\u0131n\u0131f\u0131n koleksiyon yap\u0131s\u0131n\u0131 ve bu koleksiyona veri ekleme i\u015flevini yapan Add metodunu tan\u0131mlad\u0131m. GetEnumerator metodu i\u00e7erisinde ise koleksiyonumuzun GetEnumerator() metodu sayesinde bir enumerator elde edip return ettim.<\/p>\n<blockquote><p>\nDiziler ve koleksiyonlar(collections) itere(itersayon) edilebilir yap\u0131lar olduklar\u0131 i\u00e7in i\u00e7lerinde GetEnumerator metodu bulunmaktad\u0131r.\n<\/p><\/blockquote>\n<p>Bu yaz\u0131m\u0131z\u0131n ileri sat\u0131rlar\u0131nda IEnumerator interface&#8217;ini detayland\u0131r\u0131rken, kendi enumerator\u00fcm\u00fcz\u00fc olu\u015fturmay\u0131da konu\u015faca\u011f\u0131z. Ama \u015fimdilik bu \u00f6rne\u011fimizde koleksiyon yahut dizi yap\u0131lar\u0131n\u0131n GetEnumerator metodunu kullanmam\u0131z i\u015fimizi yeterince g\u00f6rmektedir.<\/p>\n<p>Velhas\u0131l&#8230; Yapt\u0131\u011f\u0131m\u0131z bu i\u015flemler neticesinde &#8220;Personeller&#8221; s\u0131n\u0131f\u0131m\u0131z, i\u00e7erisinde bir &#8220;Personel&#8221; veri k\u00fcmesi bar\u0131nd\u0131ran ve bu veri k\u00fcmesi \u00fczerinde itere edilebilir bir nitelik arz eden bir s\u0131n\u0131f mahiyetindedir.<\/p>\n<p>\u015euana kadar yapt\u0131\u011f\u0131m\u0131z \u00e7al\u0131\u015fmay\u0131 derleyip foreach d\u00f6ng\u00fcs\u00fcnde s\u0131n\u0131f\u0131m\u0131z\u0131 test etti\u011fimiz vakit \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rece\u011fiz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            Personeller personeller = new Personeller();\r\n            personeller.Add(new Personel { Id = 1, Adi = &quot;Gen\u00e7ay&quot;, SoyAdi = &quot;Y\u0131ld\u0131z&quot; });\r\n            personeller.Add(new Personel { Id = 2, Adi = &quot;Asl\u0131&quot;, SoyAdi = &quot;Cambaz&quot; });\r\n            personeller.Add(new Personel { Id = 3, Adi = &quot;Elif&quot;, SoyAdi = &quot;G\u00f6k&quot; });\r\n            personeller.Add(new Personel { Id = 4, Adi = &quot;Ayk\u0131z&quot;, SoyAdi = &quot;Y\u0131ld\u0131z&quot; });\r\n            personeller.Add(new Personel { Id = 5, Adi = &quot;Erol&quot;, SoyAdi = &quot;Bur\u00e7ak&quot; });\r\n            foreach (Personel personel in personeller)\r\n                Console.WriteLine($&quot;ID : {personel.Id}\\nAd\u0131 : {personel.Adi}\\nSoyad\u0131 : {personel.SoyAdi}\\n*****&quot;);\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-1.png\" alt=\"C#&#039;ta IEnumerable ve IEnumerator Interfaceleri Nedir? ve Nas\u0131l Kullan\u0131l\u0131r?\" width=\"149\" height=\"323\" class=\"aligncenter size-full wp-image-5813\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-1.png 149w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-1-138x300.png 138w\" sizes=\"auto, (max-width: 149px) 100vw, 149px\" \/><\/a><\/p>\n<p>Burada dikkatinizi \u00e7ekmek istedi\u011fim bir husus var. &#8220;Personeller&#8221; s\u0131n\u0131f\u0131n\u0131 foreach d\u00f6ng\u00fcs\u00fcnde kullan\u0131rken d\u00f6ng\u00fc de\u011fi\u015fkeninin(personel) tipini &#8220;var&#8221; olarak belirleyip ilgili nesnenin tipini belirlemeyi compilera b\u0131rakabilirdik. Lakin \u015fuana kadar yapm\u0131\u015f oldu\u011fumuz t\u00fcm i\u015flemler d\u00f6ng\u00fc de\u011fi\u015fkeninin object olarak gelmesini sa\u011flamaktad\u0131r. O y\u00fczden direkt olarak cast i\u015flemi uygulat\u0131yor, &#8220;var&#8221; yerine &#8220;Personel&#8221; tipini kullan\u0131yorum.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-2.png\" alt=\"C#\u2019ta IEnumerable ve IEnumerator Interfaceleri Nedir? ve Nas\u0131l Kullan\u0131l\u0131r?\" width=\"328\" height=\"72\" class=\"aligncenter size-full wp-image-5815\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-2.png 328w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-2-300x66.png 300w\" sizes=\"auto, (max-width: 328px) 100vw, 328px\" \/><\/a><br \/>\nE\u011fer ki siz &#8220;var&#8221; kullanmak istiyorsan\u0131z GetEnumerator metodunun geri d\u00f6n\u00fc\u015f tipini a\u015fa\u011f\u0131daki gibi generic IEnumerator olarak tan\u0131mlaman\u0131z gerekmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n...\r\n        public IEnumerator&lt;Personel&gt; GetEnumerator()\r\n        {\r\n            return PersonelListesi.GetEnumerator();\r\n        }\r\n...\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-3.png\" alt=\"C#&#039;ta IEnumerable ve IEnumerator Interfaceleri Nedir? ve Nas\u0131l Kullan\u0131l\u0131r?\" width=\"360\" height=\"151\" class=\"aligncenter size-full wp-image-5818\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-3.png 360w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-3-300x126.png 300w\" sizes=\"auto, (max-width: 360px) 100vw, 360px\" \/><\/a><br \/>\nBu ek bilgiden sonra art\u0131k konumuzun ikinci ana unsuruna gelebiliriz.<\/p>\n<p>Evet sevgili okurlar\u0131m&#8230; G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, olu\u015fturmu\u015f oldu\u011fumuz herhangi bir s\u0131n\u0131f\u0131 itere edilebilir hale getirmeyi ve foreach d\u00f6ng\u00fcs\u00fc ile bu s\u0131n\u0131f \u00fczerinde d\u00f6nmeyi g\u00f6rm\u00fc\u015f olduk.<\/p>\n<p>\u015eimdi makalemizin bu noktas\u0131na gelen okuyucular\u0131m\u0131n kafalar\u0131nda muhakemesini yapt\u0131klar\u0131 konu\u015fmalar san\u0131r\u0131m \u00fc\u00e7 a\u015fa\u011f\u0131 be\u015f yukar\u0131 a\u015fa\u011f\u0131da tahmin etti\u011fime benzer niteliktedir.<br \/>\n<strong>Ya hoca, onca yazd\u0131n \u00e7izdin anlad\u0131kta iki sat\u0131r IEnumerable yahut IEnumerator interfacelerini kullanmad\u0131n?<\/strong><\/p>\n<p>Evet. \u015eu ana kadar hi\u00e7 IEnumerable ve IEnumerator interfacelerini kullanmad\u0131m diyebiliriz. Haydi gelin \u015fimdi bu interfaceleri tek tek ele alal\u0131m ve bu s\u0131rada yukar\u0131daki sat\u0131rlarda bahsetti\u011fimiz GetEnumerator metodunuda tam teferruatl\u0131 masaya yat\u0131ral\u0131m.<\/p>\n<h3>IEnumerable Interface&#8217;i<\/h3>\n<p>IEnumerable interface&#8217;i sayesinde bir s\u0131n\u0131f itere edilebilir \u00f6zellik kazanmaktad\u0131r. <em><strong>Peki bir s\u0131n\u0131f\u0131n itere edilebilirlik \u00f6zellik kazanmas\u0131 neydi?<\/strong><\/em> diye sorarsak e\u011fer \u00fcst sat\u0131rlarda bahsetti\u011fimiz gibi o s\u0131n\u0131f\u0131n geriye IEnumerator nesnesi d\u00f6nen GetEnumerator isimli metodu bar\u0131nd\u0131r\u0131yor olmas\u0131 demekti. Ee haliyle IEnumerable interface&#8217;i ilgili s\u0131n\u0131fa uyguland\u0131\u011f\u0131nda GetEnumerator metodunu implement edecektir.<\/p>\n<p>Yani uzun laf\u0131n k\u0131sas\u0131 IEnumerable interface&#8217;in implement edildi\u011fi bir class \u00fczerine GetEnumerator metodu uygulatt\u0131r\u0131l\u0131r. Haliyle yukar\u0131da yapt\u0131\u011f\u0131m\u0131z gibi ilgili metodu manuel olarak yazmaktan ve olas\u0131 imla hatalar\u0131ndan bizleri kurtarmaktad\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Personel\r\n    {\r\n        public int Id { get; set; }\r\n        public string Adi { get; set; }\r\n        public string SoyAdi { get; set; }\r\n    }\r\n\r\n    class Personeller : IEnumerable&lt;Personel&gt;\r\n    {\r\n        List&lt;Personel&gt; PersonelListesi = new List&lt;Personel&gt;();\r\n        public void Add(Personel p)\r\n        {\r\n            PersonelListesi.Add(p);\r\n        }\r\n        public IEnumerator&lt;Personel&gt; GetEnumerator()\r\n        {\r\n            return PersonelListesi.GetEnumerator();\r\n        }\r\n        IEnumerator IEnumerable.GetEnumerator()\r\n        {\r\n            return PersonelListesi.GetEnumerator();\r\n        }\r\n    }\r\n<\/pre>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere \u00e7ok rahat bir \u015fekilde ilgili s\u0131n\u0131f\u0131m\u0131z itere edilebilir hale getirilmektedir.<\/p>\n<h3>IEnumerator Interface&#8217;i<\/h3>\n<p>IEnumerable interface&#8217;i ile bir s\u0131n\u0131f itere edilebilir hale getiriliyor, bu i\u015flem i\u00e7inde GetEnumerator metodu s\u0131n\u0131fa implement ediliyordu. IEnumerator interface&#8217;i ise iterasyon \u00f6zelli\u011fi kazand\u0131racak ve iterasyon i\u015fleminde kullan\u0131lacak elemanlar\u0131 ve \u00f6zellikleri bar\u0131nd\u0131rmaktad\u0131r.<\/p>\n<p>Bu elemanlar\/\u00f6zellikler;<\/p>\n<ul>\n<li><strong><em>Current<\/em><\/strong><br \/>\n\u0130terasyon&#8217;da kal\u0131nan yeri temsil eder.\n<\/li>\n<li><strong><em>MoveNext<\/em><\/strong><br \/>\n\u0130terasyon&#8217;da bir sonraki ad\u0131m var m\u0131?\/yok mu? kontrol\u00fcn\u00fc sa\u011flar.\n<\/li>\n<li><strong><em>Reset<\/em><\/strong><br \/>\n\u0130terasyon&#8217;u ba\u015fa al\u0131r.\n<\/li>\n<li><strong><em>Dispose<\/em><\/strong><br \/>\n\u0130terasyon&#8217;un bitti\u011fini temsil eder.\n<\/li>\n<\/ul>\n<div id=\"attachment_5824\" style=\"width: 892px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5824\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.png\" alt=\"C#\u2019ta IEnumerable ve IEnumerator Interfaceleri Nedir? ve Nas\u0131l Kullan\u0131l\u0131r?\" width=\"882\" height=\"353\" class=\"size-full wp-image-5824\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.png 882w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r-300x120.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r-768x307.png 768w\" sizes=\"auto, (max-width: 882px) 100vw, 882px\" \/><\/a><p id=\"caption-attachment-5824\" class=\"wp-caption-text\">Bu g\u00f6rsel http:\/\/www.yazilimgunlugu.com\/ienumerable-ve-ienumerator-ara-yuzleri-ve-kullanimi-makalesi\/738.aspx adresinden al\u0131nm\u0131\u015ft\u0131r.<\/p><\/div>\n<p>Biz \u015fuana kadar ilgili s\u0131n\u0131f\u0131m\u0131z i\u00e7erisinde kulland\u0131\u011f\u0131m\u0131z veri k\u00fcmesinin GetEnumerator metodu arac\u0131l\u0131\u011f\u0131yla enumerator&#8217;um\u00fcz\u00fc elde ettik. Haydi gelin \u015fimdi de kendi enumerator&#8217;um\u00fcz\u00fc yazal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class PersonelEnumerator : IEnumerator&lt;Personel&gt;\r\n    {\r\n        List&lt;Personel&gt; Kaynak;\r\n        int currentIndex = -1;\r\n        public PersonelEnumerator(List&lt;Personel&gt; Kaynak) =&gt; this.Kaynak = Kaynak;\r\n        public Personel Current =&gt; Kaynak&#x5B;currentIndex];\r\n        object IEnumerator.Current =&gt; Kaynak&#x5B;currentIndex];\r\n        public void Dispose() =&gt; Console.WriteLine(&quot;\u0130terasyon bittiii...&quot;);\r\n        public bool MoveNext() =&gt; ++currentIndex &lt; Kaynak.Count;\r\n        public void Reset() =&gt; currentIndex = 0;\r\n    }\r\n<\/pre>\n<p>Ve &#8220;Personeller&#8221; s\u0131n\u0131f\u0131ndaki GetEnumerator metodundan kendi yazd\u0131\u011f\u0131m\u0131z enumerator nesnesini d\u00f6nelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Personel\r\n    {\r\n        public int Id { get; set; }\r\n        public string Adi { get; set; }\r\n        public string SoyAdi { get; set; }\r\n    }\r\n\r\n    class Personeller : IEnumerable&lt;Personel&gt;\r\n    {\r\n        List&lt;Personel&gt; PersonelListesi = new List&lt;Personel&gt;();\r\n        public void Add(Personel p) =&gt; PersonelListesi.Add(p);\r\n        public IEnumerator&lt;Personel&gt; GetEnumerator() =&gt; new PersonelEnumerator(PersonelListesi);\r\n        IEnumerator IEnumerable.GetEnumerator() =&gt; new PersonelEnumerator(PersonelListesi);\r\n    }\r\n<\/pre>\n<p>Sonu\u00e7;<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-4.png\" alt=\"C#&#039;ta IEnumerable ve IEnumerator Interfaceleri Nedir? ve Nas\u0131l Kullan\u0131l\u0131r?\" width=\"182\" height=\"343\" class=\"aligncenter size-full wp-image-5828\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-4.png 182w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/03\/Cta-IEnumerable-ve-IEnumerator-Interfaceleri-Nedir-ve-Nas\u0131l-Kullan\u0131l\u0131r.-4-159x300.png 159w\" sizes=\"auto, (max-width: 182px) 100vw, 182px\" \/><\/a><\/p>\n<p>IEnumerable ve IEnumerator interfaceler&#8217;i ile sizlerde olu\u015fturdu\u011funuz s\u0131n\u0131flara itere \u00f6zellikleri kazand\u0131rabilir, hatta IEnumerator interface&#8217;i ile olu\u015fturdu\u011funuz enumerator&#8217;de iste\u011finize g\u00f6re iterasyonun periyodunu ayarlayabilir ve foreach d\u00f6ng\u00fcs\u00fcnde kullanabilirsiniz.<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#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, C#&#8217;ta koleksiyon yahut array yap\u0131lar\u0131 \u00fczerinde periyodik bir d\u00fczende d\u00f6nmemizi ve verileri bu \u015fekilde tek tek elde etmemizi sa\u011flayan foreach d\u00f6ng\u00fcs\u00fcn\u00fcn temel \u00e7al\u0131\u015fma prensibi olan iterasyon mant\u0131\u011f\u0131n\u0131n kendi s\u0131n\u0131flar\u0131m\u0131z \u00fczerinde nas\u0131l uygulanaca\u011f\u0131n\u0131 inceleyece\u011fiz.&#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":3223,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[1650,1043,1044,1042],"class_list":["post-5788","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c-sharp-c","tag-getenumerator","tag-ienumerable","tag-ienumerator","tag-iterasyon"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5788","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=5788"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/5788\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3223"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=5788"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=5788"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=5788"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}