Il metodo statico Convert.ChangeType permette di ottenere un oggetto di un determinato tipo partendo dal valore dell'oggetto di un altro tipo a patto che il valore sia convertibile e che il tipo sorgente implementi l'interfaccia IConvertible. Per fare un esempio, il metodo può convertire una stringa in un numero a patto che la stringa abbia un valore numerico. Questo metodo torna utile quando dobbiamo effettuare una conversione in un metodo generico il cui tipo di destinazione viene specificato dal chiamante. Prendiamo come esempio il seguente codice.
private T ConvertValue<T>(object? value) { return (T)Convert.ChangeType(value, typeof(T)); } var intValue = ConvertValue<int>("34");
Il codice che invoca la funzione si vede restituire correttamente il valore, ma la situazione cambia quando si cominciano a utilizzare i tipi nullabili. Se passiamo a Convert.ChangeType un oggetto di tipo int? invece che int, il metodo solleva un'eccezione di tipo InvalidCastException anche se il valore è convertibile. Per ovviare a questo problema possiamo usare la reflection e verificare che se il tipo verso cui dobbiamo convertire è un nullable, allora prendiamo il suo tipo base e passiamo quello al metodo Convert.ChangeType. Inoltre, se il valore di origine è null, possiamo direttamente restituire null senza nemmeno chiamare Convert.ChangeType.
private T ConvertValue<T>(object? value) { var t = Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T); result = value is null ? default(T) : (T)Convert.ChangeType(value!, t); }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Avviare e arrestare programmaticamente un Hosted Service di ASP.NET Core
- Il web per le masse: Microsoft presenta il nuovo editor gratuito WebMatrix
- Windows Phone 8 Developer Day - Milano
- Learn&Get ASP.NET 2.0 AJAX - Milano
- .NET Conference Italia 2024 - Milano
- Anche Windows Server 2008 R2 in beta1
- Speciale costruire applicazioni con cloud e servizi
- MIX 2011: Tutte le novità dei tool di ASP.NET MVC 3
- Windows Phone 7.1 Mango: ecco i tool in beta
- Disponibile la ROM e l'SDK di Windows Phone 7.1 beta 2