Tra le varie novità di .NET 7, una gradita introduzione è stata l'interfaccia IParsable
public record Money(string Currency, decimal Value) : IParsable<Money> { // altro codice qui... public override string ToString() { return $"Currency: {Currency} - Value: {Value}"; } }
Possiamo implementare l'interfaccia IParsable con il codice seguente, in modo da convertire facilmente una string in un oggetto Money:
public static Money Parse(string? value, IFormatProvider? provider) { var tokens = value?.Split(' '); if (tokens?.Length != 2) { throw new ArgumentException("Money must be in the format '{Currency} {Value}'."); } return new Money(tokens[0], decimal.Parse(tokens[1], provider)); } public static bool TryParse(string? value, IFormatProvider? provider, out Money result) { try { result = Money.Parse(value, provider); return true; } catch (Exception) { result = default; return false; } }
A questo punto, possiamo utilizzare il nostro tipo Money in una qualsiasi action, esattamente come faremmo con una string o un int, dato che ASP.NET Core invocherà automaticamente il nostro metodo TryParse per provare a convertire il valore in query string nell'oggetto vero e proprio:
[HttpGet] public IActionResult Get(Money amount) { return this.Ok(amount); }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Sostituire la GitHub Action di login su private registry
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Usare lo spread operator con i collection initializer in C#
Usare il versioning con i controller di ASP.NET Core Web API
Specificare il versioning nel path degli URL in ASP.NET Web API
Reactive form tipizzati con modellazione del FormBuilder in Angular
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Load test di ASP.NET Core con k6
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Elencare le container images installate in un cluster di Kubernetes
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core