Imports System.Collections.Generic
Private nomeUtente As String = "Marco"
Private attivitàDefinite As List(Of Attività) = new List(Of Attività) From {
New Attività("00:00", "sta dormendo"),
New Attività("07:00", "si sveglia"),
New Attività("08:00", "è a scuola"),
New Attività("13:00", "sta pranzando"),
New Attività("14:00", "fa un sonnellino"),
New Attività("15:30", "fa i compiti"),
New Attività("20:00", "sta cenando"),
New Attività("21:00", "guarda la TV"),
New Attività("23:00", "sta dormendo")
Console.WriteLine("Digita un orario nella forma hh:mm e premi invio")
Dim orarioTestuale As String = Console.ReadLine()
Dim attivitàEseguita As String = DeterminaAttività(orarioTestuale, attivitàDefinite)
attivitàEseguita = If(attivitàEseguita, "non si sa cosa faccia a quell'ora")
Console.WriteLine("{0} {1}", nomeUtente, attivitàEseguita)
Catch eccezione As FormatException
Console.WriteLine("Non è stato possibile stabilire cosa sta facendo {0} perché si è verificato un errore: {1}", nomeUtente, eccezione.Message)
Console.Write("Vuoi provare con un altro orario (s/N)? ")
ancora = Console.ReadLine()
Loop Until Not ancora.Equals("S", StringComparison.OrdinalIgnoreCase)
Console.WriteLine("Fine programma")
Public Function DeterminaAttività(orarioTestuale As String, attivitàDefinite As IEnumerable(Of Attività)) as String
If String.IsNullOrWhiteSpace(orarioTestuale) Then Throw new ArgumentException("Devi fornire un orario")
If attivitàDefinite Is Nothing OR Not attivitàDefinite.Any() Then Throw new ArgumentException("Devi fornire un elenco di attività")
Dim orario As TimeSpan = Attività.ParsaOrario(orarioTestuale)
Return attivitàDefinite.Where(Function(a) a.OrarioDiInizio <= orario).OrderByDescending(Function(a) a.OrarioDiInizio).Select(Function(a) a.Descrizione).FirstOrDefault()
Public Sub New(orarioDiInizioTestuale as String, descrizione As String)
Me.New(ParsaOrario(orarioDiInizioTestuale), descrizione)
Public Sub New(orarioDiInizio as TimeSpan, descrizione As String)
If orarioDiInizio.TotalHours >= 24 Then Throw New ArgumentException("L'orario non è valido")
If String.IsNullOrWhiteSpace(descrizione) Then Throw New ArgumentException("La descrizione non è valida")
Me.OrarioDiInizio = orarioDiInizio
Me.Descrizione = descrizione
Public Property OrarioDiInizio As TimeSpan
Public Property Descrizione As String
Public Shared Function ParsaOrario(orarioTestuale as String) As TimeSpan
If String.IsNullOrWhiteSpace(orarioTestuale) Then Throw new ArgumentException("L'orario non era valido")
orarioTestuale = orarioTestuale.Replace({":"c, "."c}, System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.TimeSeparator)
If Not TimeSpan.TryParse(orarioTestuale, orario) Then Throw New FormatException("L'orario non era in un formato valido. Indicalo nel formato hh:mm")