Hier is een oefening om te oefenen met List<T> in C#. De oefening laat je werken met een lijst van gebruikers.
Specificaties
Maak een klasse User met de eigenschappen:
int Id
string Name
Maak een klasse UserManager met:
Een List<User> als opslag voor gebruikers.
Een methode AddUser(int id, string name) om een gebruiker toe te voegen.
Een methode RemoveUser(int id) om een gebruiker te verwijderen.
Een methode GetAllUsers() die alle gebruikers teruggeeft.
In de Main-methode:
Maak een UserManager-instantie aan.
Voeg drie gebruikers toe.
Toon de lijst van gebruikers.
Verwijder één gebruiker.
Toon opnieuw de lijst van gebruikers.
Verwachte output
Gebruikerslijst:
1: Alice
2: Bob
3: Charlie
Na verwijderen van gebruiker 2:
1: Alice
3: Charlie
Nu jij
using System;using System.Collections.Generic;public class User{ public int Id { get; set; } public string Name { get; set; } public User(int id, string name) { Id = id; Name = name; }}public class UserManager{ // jouw uitwerking}class Program{ static void Main() { UserManager userManager = new UserManager(); userManager.AddUser(1, "Alice"); userManager.AddUser(2, "Bob"); userManager.AddUser(3, "Charlie"); Console.WriteLine("Gebruikerslijst:"); foreach (var user in userManager.GetAllUsers()) { Console.WriteLine($"{user.Id}: {user.Name}"); } userManager.RemoveUser(2); Console.WriteLine("\nNa verwijderen van gebruiker 2:"); foreach (var user in userManager.GetAllUsers()) { Console.WriteLine($"{user.Id}: {user.Name}"); } }}
Mogelijke uitwerking
using System;using System.Collections.Generic;public class User{ public int Id { get; set; } public string Name { get; set; } public User(int id, string name) { Id = id; Name = name; }}public class UserManager{ private List<User> users = new(); public void AddUser(int id, string name) { users.Add(new User(id, name)); } public void RemoveUser(int id) { users.RemoveAll(u => u.Id == id); } public List<User> GetAllUsers() { return users; }}class Program{ static void Main() { UserManager userManager = new UserManager(); userManager.AddUser(1, "Alice"); userManager.AddUser(2, "Bob"); userManager.AddUser(3, "Charlie"); Console.WriteLine("Gebruikerslijst:"); foreach (var user in userManager.GetAllUsers()) { Console.WriteLine($"{user.Id}: {user.Name}"); } userManager.RemoveUser(2); Console.WriteLine("\nNa verwijderen van gebruiker 2:"); foreach (var user in userManager.GetAllUsers()) { Console.WriteLine($"{user.Id}: {user.Name}"); } }}
Oefening 2
Je gaat een eenvoudige boekenbibliotheek maken waarin je boeken kunt toevoegen en verwijderen met behulp van een List<string>.
Specificaties
-=INITIALISEREN=- van de lijst
Maak een List<string> genaamd boeken.
Voeg minstens drie boekentitels toe aan de lijst. Lijst weergeven
Toon alle boeken in de console met een foreach-loop.
Gebruikerinteractie
Vraag de gebruiker om een nieuwe boekentitel toe te voegen.
Vraag de gebruiker om een boek te verwijderen op basis van de titel.
Geüpdatete lijst tonen
Toon de lijst opnieuw na de wijzigingen.
Verwachte output
Boeken in de bibliotheek:
- De Hobbit
- Harry Potter
- De Da Vinci Code
Voer een nieuwe boekentitel in: In de Ban van de Ring
Voer de titel in van het boek dat je wilt verwijderen: Harry Potter
Geüpdatete boekenlijst:
- De Hobbit
- De Da Vinci Code
- In de Ban van de Ring
Nu jij
using System;using System.Collections.Generic;class Program{ static void Main() { // Stap 1: Initialiseren van de boekenlijst // Stap 2: Lijst weergeven // Stap 3: Gebruiker voegt een boek toe // Stap 4: Gebruiker verwijdert een boek // Stap 5: Geüpdatete lijst tonen } // Hulpmethode om de boekenlijst weer te geven static void ToonBoeken(List<string> boeken) { if (boeken.Count == 0) { Console.WriteLine("De bibliotheek is leeg."); } else { foreach (var boek in boeken) { Console.WriteLine($"- {boek}"); } } }}
Mogelijke uitwerking
using System;using System.Collections.Generic;class Program{ static void Main() { // Stap 1: Initialiseren van de boekenlijst List<string> boeken = new List<string> { "De Hobbit", "Harry Potter", "De Da Vinci Code" }; // Stap 2: Lijst weergeven Console.WriteLine("Boeken in de bibliotheek:"); ToonBoeken(boeken); // Stap 3: Gebruiker voegt een boek toe Console.Write("\nVoer een nieuwe boekentitel in: "); string nieuwBoek = Console.ReadLine(); if (!string.IsNullOrWhiteSpace(nieuwBoek)) { boeken.Add(nieuwBoek); Console.WriteLine($"'{nieuwBoek}' is toegevoegd aan de bibliotheek."); } // Stap 4: Gebruiker verwijdert een boek Console.Write("\nVoer de titel in van het boek dat je wilt verwijderen: "); string teVerwijderenBoek = Console.ReadLine(); if (boeken.Remove(teVerwijderenBoek)) { Console.WriteLine($"'{teVerwijderenBoek}' is verwijderd uit de bibliotheek."); } else { Console.WriteLine($"'{teVerwijderenBoek}' kon niet worden gevonden."); } // Stap 5: Geüpdatete lijst tonen Console.WriteLine("\nGeüpdatete boekenlijst:"); ToonBoeken(boeken); } // Hulpmethode om de boekenlijst weer te geven static void ToonBoeken(List<string> boeken) { if (boeken.Count == 0) { Console.WriteLine("De bibliotheek is leeg."); } else { foreach (var boek in boeken) { Console.WriteLine($"- {boek}"); } } }}
Oefening 3
Implementeer een generieke klasseOpslag<T> die gegevens van een willekeurig type kan opslaan en ophalen.
Specificaties
De klasse moet de volgende functionaliteiten hebben:
Een methode VoegToe(T item) om een item toe te voegen.
Een methode Verwijder(T item) om een item te verwijderen.
Een methode ToonAlle() om alle opgeslagen items weer te geven.
Verwachte output
Toegevoegd: 10
Toegevoegd: 20
Toegevoegd: 30
Opgeslagen items:
- 10
- 20
- 30
Verwijderd: 20
Opgeslagen items:
- 10
- 30
Toegevoegd: Alice
Toegevoegd: Bob
Toegevoegd: Charlie
Opgeslagen items:
- Alice
- Bob
- Charlie
Verwijderd: Bob
Opgeslagen items:
- Alice
- Charlie
Nu jij
using System;using System.Collections.Generic;// Generieke klasse Opslag<T>class Program{ static void Main() { // Gebruik met integers Opslag<int> getallenOpslag = new Opslag<int>(); getallenOpslag.VoegToe(10); getallenOpslag.VoegToe(20); getallenOpslag.VoegToe(30); getallenOpslag.ToonAlle(); getallenOpslag.Verwijder(20); getallenOpslag.ToonAlle(); // Gebruik met strings Opslag<string> namenOpslag = new Opslag<string>(); namenOpslag.VoegToe("Alice"); namenOpslag.VoegToe("Bob"); namenOpslag.VoegToe("Charlie"); namenOpslag.ToonAlle(); namenOpslag.Verwijder("Bob"); namenOpslag.ToonAlle(); }}
Mogelijke uitwerking
using System;using System.Collections.Generic;// Generieke klasse Opslag<T>public class Opslag<T>{ private List<T> items = new(); // Methode om een item toe te voegen public void VoegToe(T item) { items.Add(item); Console.WriteLine($"Toegevoegd: {item}"); } // Methode om een item te verwijderen public void Verwijder(T item) { if (items.Remove(item)) { Console.WriteLine($"Verwijderd: {item}"); } else { Console.WriteLine($"Item niet gevonden: {item}"); } } // Methode om alle items te tonen public void ToonAlle() { Console.WriteLine("\nOpgeslagen items:"); foreach (var item in items) { Console.WriteLine($"- {item}"); } }}class Program{ static void Main() { // Gebruik met integers Opslag<int> getallenOpslag = new Opslag<int>(); getallenOpslag.VoegToe(10); getallenOpslag.VoegToe(20); getallenOpslag.VoegToe(30); getallenOpslag.ToonAlle(); getallenOpslag.Verwijder(20); getallenOpslag.ToonAlle(); // Gebruik met strings Opslag<string> namenOpslag = new Opslag<string>(); namenOpslag.VoegToe("Alice"); namenOpslag.VoegToe("Bob"); namenOpslag.VoegToe("Charlie"); namenOpslag.ToonAlle(); namenOpslag.Verwijder("Bob"); namenOpslag.ToonAlle(); }}
Oefening 4
In deze oefening implementeer je een interface en een klasse implementeren met een type constraint.
Specificaties
Maak een interface IEvenement met minimaal de eigenschappen:
string Naam
DateTime Datum
Implementeer een klasse Evenement die IEvenement gebruikt.
Maak een generieke klasse EvenementenPlanner<T>, die alleen werkt met objecten die IEvenement implementeren.
Voeg methoden toe om:
Een evenement toe te voegen.
Een lijst van alle evenementen op te vragen.
Het eerstvolgende evenement (op datum) op te vragen.
Optioneel
Voeg een methode toe om alle evenementen te verwijderen die in het verleden liggen.
Voeg een check toe zodat er geen dubbele evenementen met dezelfde naam en datum worden toegevoegd.
Verwachte output
Alle evenementen:Concert op 10-05-2025Festival op 20-06-2025Sportwedstrijd op 05-04-2025Eerstvolgende evenement: Sportwedstrijd op 05-04-2025Evenementen na verwijderen van oude:Concert op 10-05-2025Festival op 20-06-2025
Nu jij
class Program{ static void Main() { EvenementenPlanner<Evenement> planner = new EvenementenPlanner<Evenement>(); planner.VoegToe(new Evenement("Concert", new DateTime(2025, 5, 10))); planner.VoegToe(new Evenement("Festival", new DateTime(2025, 6, 20))); planner.VoegToe(new Evenement("Sportwedstrijd", new DateTime(2025, 4, 5))); Console.WriteLine("Alle evenementen:"); foreach (var ev in planner.GetAlleEvenementen()) { Console.WriteLine($"{ev.Naam} op {ev.Datum:dd-MM-yyyy}"); } var eerstvolgende = planner.GetEerstvolgendeEvenement(); if (eerstvolgende != null) { Console.WriteLine($"\nEerstvolgende evenement: {eerstvolgende.Naam} op {eerstvolgende.Datum:dd-MM-yyyy}"); } // Oude evenementen verwijderen en opnieuw tonen planner.VerwijderOudeEvenementen(); Console.WriteLine("\nEvenementen na verwijderen van oude:"); foreach (var ev in planner.GetAlleEvenementen()) { Console.WriteLine($"{ev.Naam} op {ev.Datum:dd-MM-yyyy}"); } }}
Mogelijke uitwerking
Interface IEvenement
public interface IEvenement{ string Naam { get; } DateTime Datum { get; }}
Klasse Evenement
public class Evenement : IEvenement{ public string Naam { get; } public DateTime Datum { get; } public Evenement(string naam, DateTime datum) { Naam = naam; Datum = datum; }}
Klasse Evenementplanner
public class EvenementenPlanner<T> where T : IEvenement{ private List<T> evenementen = new List<T>(); public void VoegToe(T evenement) { // Voorkom dubbele evenementen foreach (var ev in evenementen) { if (ev.Naam == evenement.Naam && ev.Datum == evenement.Datum) { Console.WriteLine("Dit evenement bestaat al."); return; } } evenementen.Add(evenement); } public List<T> GetAlleEvenementen() { return evenementen; } public T? GetEerstvolgendeEvenement() { if (evenementen.Count == 0) { return default; } T eerstvolgende = evenementen[0]; foreach (var ev in evenementen) { if (ev.Datum < eerstvolgende.Datum) { eerstvolgende = ev; } } return eerstvolgende; } public void VerwijderOudeEvenementen() { evenementen.RemoveAll(e => e.Datum < DateTime.Now); }}
Main
class Program{ static void Main() { EvenementenPlanner<Evenement> planner = new EvenementenPlanner<Evenement>(); planner.VoegToe(new Evenement("Concert", new DateTime(2025, 5, 10))); planner.VoegToe(new Evenement("Festival", new DateTime(2025, 6, 20))); planner.VoegToe(new Evenement("Sportwedstrijd", new DateTime(2025, 4, 5))); Console.WriteLine("Alle evenementen:"); foreach (var ev in planner.GetAlleEvenementen()) { Console.WriteLine($"{ev.Naam} op {ev.Datum:dd-MM-yyyy}"); } var eerstvolgende = planner.GetEerstvolgendeEvenement(); if (eerstvolgende != null) { Console.WriteLine($"\nEerstvolgende evenement: {eerstvolgende.Naam} op {eerstvolgende.Datum:dd-MM-yyyy}"); } // Oude evenementen verwijderen en opnieuw tonen planner.VerwijderOudeEvenementen(); Console.WriteLine("\nEvenementen na verwijderen van oude:"); foreach (var ev in planner.GetAlleEvenementen()) { Console.WriteLine($"{ev.Naam} op {ev.Datum:dd-MM-yyyy}"); } }}
Oefening 5
Vul de ontbrekende delen in om een generieke methode Wissel te implementeren die twee waarden van hetzelfde type omwisselt.
Specificaties
Vul de ontbrekende delen in (__________) om de generieke methode correct te implementeren.
Test de methode met verschillende gegevenstypes, zoals double, string, etc.
Verwachte output
Voor wisselen: x = 5, y = 10
Na wisselen: x = 10, y = 5
Nu jij
using System;class Program{ // Definieer hier een generieke methode Wissel die twee waarden omwisselt static void ____________(ref T a, ref T b) { ______ temp = a; a = __; b = temp; } static void Main() { int x = 5, y = 10; Console.WriteLine($"Voor wisselen: x = {x}, y = {y}"); // Roep hier de generieke Wissel-methode aan Wissel(__________); Console.WriteLine($"Na wisselen: x = {x}, y = {y}"); }}
Mogelijke uitwerking
using System;class Program{ // Definieer een generieke methode Wissel die twee waarden omwisselt static void Wissel<T>(ref T a, ref T b) { T temp = a; a = b; b = temp; } static void Main() { int x = 5, y = 10; Console.WriteLine($"Voor wisselen: x = {x}, y = {y}"); // Roep de generieke Wissel-methode aan Wissel(ref x, ref y); Console.WriteLine($"Na wisselen: x = {x}, y = {y}"); }}