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.
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.
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.
ale pozostnanie tworzenie Person – new Person, czego nie chce
to chyba bylo za proste :) nastepnym razem bardziej sie postaram :) gratki
Gutek, fajna inicjatywa. Challenge to troche za mocne slowo na takie zadanko. Nazwalbym to "Wprawki Programistyczne" :)
Comments are closed.