static void Main(string[] args)
        {
            var ugyfel = new Ugyfel();

            ugyfel.Name = "Gipsz Jakab";
            //ugyfel.Address = "Utca, hsz";

            var vegeredmeny = true;

            foreach (bool eredmeny in Validalas(ugyfel))
            {
                if (!eredmeny)
                {
                    vegeredmeny = false;
                    break;
                }
            }

            Console.WriteLine("Validálás sikeres: {0}", vegeredmeny);

            var lista = new List <string>(new string[] { "Egy", "Ketto", "Harom" });

            var gyujtemeny = new BejarhatoGyujtemeny(lista);

            foreach (var item in gyujtemeny)
            {
                Console.WriteLine("+++{0}", item);
            }

            ///A foreach ciklus működése a következő
            ///
            ///Bejaro bejaro = BejarhatoGyujtemeny.GetEnumerator()
            ///do
            ///{
            ///   var leszkovetkezo = Bejaro.MoveNext();
            ///   var aktualis = Bejaro.Current();
            ///   (tennivaló elvégzése az aktuális elemen)
            ///} while (leszkovetkezo)
            ///

            ///Figyelni kell arra, hogy a bejárás indulása után az eredeti
            ///osztály módosulhat, és ilyen esetekben ezzel
            ///foglalkozni kell. Például a Lista osztály bejáró implementációja
            ///ezt nem engedi:
            //foreach (var item in lista)
            //{
            //    lista.Remove(item);
            //}
            ///Ha bejárás közben akarom módosítani, akkor
            ///kivételt dob:
            ///An unhandled exception of type 'System.InvalidOperationException' occurred in mscorlib.dll
            ///Additional information: Collection was modified; enumeration operation may not execute.

            Console.ReadLine();
        }
        /// <summary>
        /// Ez a függvény demonstrálja, hogy egy ciklusból is meg tudunk hívni összetett
        /// műveletet. Az IEnumerable visszatérési típussal és a
        /// yield return visszatéréssel a függvényünk
        /// részekben fut, egyszerre mindig csak a következő
        /// yield return-ig, majd a következő végrehajtás
        /// innen, ebből az állapotból folytatja, és így tovább,
        /// amíg a függvény véget nem ér
        /// </summary>
        /// <param name="ugyfel"></param>
        /// <returns></returns>
        private static IEnumerable <bool> Validalas(Ugyfel ugyfel)
        {
            yield return(!string.IsNullOrWhiteSpace(ugyfel.Name));

            yield return(!string.IsNullOrWhiteSpace(ugyfel.Address));

            ///Es itt folytathatnánk a sort bármeddig
            ///

            //A foreach ciklus egészen addig hívja újra, amíg yield return-nel térünk vissza
            //ha nem, akkor nem hív többé
        }