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 KOMENTARZE

  1. 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. 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.

Comments are closed.