using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace C
{
    class Program
    {
        static void Main(string[] args)
        {
            Vorlesungsteilnehmer vt = new Vorlesungsteilnehmer(10);
            StudentIn jan = new StudentIn("jan", 'm');
            vt.Add(jan);
            Console.WriteLine("Student Jan hinzugefügt.");
            StudentIn frank = new StudentIn("frank", 'm');
            vt.Add(frank);
            Console.WriteLine("Student Frank hinzugefügt.");
            Console.WriteLine("Anzahl männlicher Teilnehmer: " + vt.CountM());
            StudentIn lena = new StudentIn("lena", 'w');
            vt.Add(lena);
            Console.WriteLine("Studentin Lena hinzugefügt.");
            StudentIn magy = new StudentIn("magy", 'w');
            vt.Add(magy);
            Console.WriteLine("Studentin Magy hinzugefügt.");
            Console.WriteLine("Anzahl weiblicher Teilnehmer: " + vt.CountF());
            Console.WriteLine("Anzahl aller Teilnehmer: " + vt.Count());
            vt.Remove(magy);
            Console.WriteLine("Studentin Magy entfernt.");
            Console.WriteLine("Anzahl weiblicher Teilnehmer: " + vt.CountF());
            Console.WriteLine("Anzahl aller Teilnehmer: " + vt.Count());
            Console.ReadLine();
        }
    }

    class Vorlesungsteilnehmer
    {
        List<StudentIn> liste;
        
        private const int capacity;
        public int Capacity
        {
            get { return capacity; }
        }

        public Vorlesungsteilnehmer(int capacity)
        {
            this.capacity = capacity;
            liste = new List<StudentIn>(capacity);
        }

        public int Count()
        {
            return liste.Count();
        }

        public int CountM()
        {
            return liste.Count(
                delegate(StudentIn s)
                {
                    return s.Gender == 'm';
                });
        }

        public int CountF()
        {
            return liste.Count(
                delegate(StudentIn s)
                {
                    return s.Gender == 'w';
                });
        }

        /*public List<StudentIn> GetF()
        {
            return liste.FindAll(
                delegate(StudentIn s)
                {
                    return s.Gender == 'w';
                });
        }*/

        public void Add(StudentIn studentIn)
        {
            liste.Add(studentIn);
        }

        public void Remove(StudentIn studentIn)
        {
            liste.Remove(studentIn);
        }

        public StudentIn this[int i]
        {
            get { return liste[i]; }
            set { liste[i] = value; }
        }
    }

    class StudentIn
    {
        private char gender;
        public char Gender
        {
            get { return gender; }
            set { gender = value; }
        }

        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public StudentIn(string name, char gender)
        {
            this.name = name;
            this.gender = gender;
        }
    }
}
