Polecam

.NET Blogs PL
CodeGuru


Challenge: Co należy zmienić w klasie Developers?

February 28, 2011 in categories: pro by Gutek

5

Mamy następujący fragment kodu:

using System;
using System.Collections;
using System.Collections.Generic;

namespace Challenge03
{
    class Program
    {
        static void Main()
        {
            Developers developers = new Developers
            {
                Team = 
                {
                    new Person { Name = "Jacek" },
                    new Person { Name = "Jola", Age = 19}
                }
            };

            foreach(var person in developers)
            {
                Console.WriteLine("({0}) - {1}", 
                    person.Age ?? -1,  
                    person.Name ?? "N/A");
            }
            Console.WriteLine("Press enter to exit");
            Console.ReadLine();
        }
    }

    public class Developers : IEnumerable<Person>
    {
        public IList<Person> Team { get; set; }

        public Developers()
        {
            Team = new List<Person>();
        }
        public IEnumerator<Person> GetEnumerator()
        {
            return Team.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }

    public class Person
    {
        public string Name { get; set; }
        public int? Age { get; set; }
    }
}

Chciałbym móc pozbyć się z inicjalizacji odwołania do Team oraz do Person jednak chciałbym mieć możliwość dodania kolejnych osób – na przykład Tomka, Piotrka (lat 30) oraz osobę bez imienia ale w wieku 50 lat (anonim) i innych jeżeli zajdzie taka potrzeba.

Oczekiwany rezultat dla danych przykładowych:

(-1) - Jacek
(19) - Jola
(-1) - Tomek
(30) - Piotrek
(50) - N/A
Press enter to exit

Co należy zmienić/dodać do klasy Developers by spełnić moje wymagania oraz uzyskać oczeekiwany wynik? Fajnie by było gdyby padło także dlaczego to jest możliwe.

Jeżeli nie padnie poprawna odpowiedź, rozwiązanie podam w przyszłym tygodniu.




 

 

 

5 comments for "Challenge: Co należy zmienić w klasie Developers?"

  1. Sławek
    Sławek Says:

    Ja bym zamienił IEnumerable<Person> na Collection<Person>, wtedy klasa Developers sama w sobie będzie kolekcją i nie będzie trzeba tworzyć listy Team.

  2. Gekon
    Gekon Says:

    namespace Test01
    {
        class Program
        {
            static void Main(string[] args)
            {
                Developers developers = new Developers()
                {
                    { "Jacek" },
                    { "Jola", 19},
                };

                developers.Add("Tomek");
                developers.Add("Piotrek", 30);
                developers.Add(50);
                
                foreach (var person in developers)
                {
                    Console.WriteLine("({0}) - {1}",
                        person.Age ?? -1,
                        person.Name ?? "N/A");
                }
                Console.WriteLine("Press enter to exit");
                Console.ReadLine();
            }
        }

        public class Developers : IEnumerable<Person>
        {
            public IList<Person> Team { get; set; }

            public Developers()
            {
                Team = new List<Person>();
            }

            public void Add(string name, int age)
            {
                Team.Add(new Person()
                {
                    Name = name,
                    Age = age
                });
            }

            public void Add(string name)
            {
                Team.Add(new Person()
                {
                    Name = name                
                });
            }

            public void Add(int age)
            {
                Team.Add(new Person()
                {
                    Age = age
                });
            }

            public IEnumerator<Person> GetEnumerator()
            {
                return Team.GetEnumerator();
            }

            IEnumerator IEnumerable.GetEnumerator()
            {
                return GetEnumerator();
            }
        }

        public class Person
        {
            public string Name { get; set; }
            public int? Age { get; set; }
        }
    }

    Aby initializator zadzialal wymagany jest Add(). Wytarczy dodac 3 addy spelniajace wszystkie kompinacje wystepowania i braku wieku / imienia.

  3. Pawel Klimczyk
    Pawel Klimczyk Says:

    Gutek, fajna inicjatywa. Challenge to troche za mocne slowo na takie zadanko. Nazwalbym to "Wprawki Programistyczne" Smile

Comments are closed

© 2008-2010 Jakub Gutkowski. Powered by BlogEngine.NET 1.5.1.14. Hosted on OrcsWeb.

Design