Sto lavorando con qualche codice legacy in questo momento che di solito utilizzava try
+ catch
in combinazione con Convert.ToDecimal(someString)
(ad esempio) per provare e convertire stringhe in decimali . Per alcuni motivi devo usare l'impostazione che - quando si esegue il debug - mi fermo ad ogni eccezione lanciata (non solo all'utente non gestita) e quindi questo è diventato fastidioso e l'ho modificato per utilizzare i metodi TryParse
ogni volta che è possibile.Un modo più elegante di scoprire se posso convertire un valore in un certo tipo
momento sto facendo una situazione in cui c'è un valore e un obiettivo object
Type
, e tutto quello che voglio sapere è se posso convertire il valore nel tipo di destinazione. In questo momento questo è fatto come segue:
try
{
Convert.ChangeType(val, targetType);
}
catch
{
// Do something else
}
Il risultato effettivo non è importante e non viene utilizzato ulteriormente.
Mentre questo codice funziona in questo momento, come ho detto, diventa un po 'fastidioso e quindi mi chiedo: C'è un altro modo di fare quanto sopra senza dover rilevare un'eccezione?
ho pensato a qualcosa di simile a IsAssignableFrom
su un Type
, ma questo non sembra essere applicabile nel mio caso (non voglio assegnare, voglio sapere se esplicitamente conversione è possibile).
Mi piace sapere in quale contesto il codice che si utilizza viene effettivamente utilizzato perché l'uso di Convert.ChangeType [odori] (https://en.wikipedia.org/wiki/Code_smell) non valido – Dbuggy
@Dbuggy Il codice è pieno purtroppo con gli odori del codice, quindi scommetto che hai ragione. È in un tipo 'ComboBox' (Forms) chiamato' BindingComboBox' che ottiene una proprietà 'DataSource' (l'intera cosa è IMHO non necessaria, ma non ho il tempo di cambiare completamente tutti i suoi usi in questo momento). Quindi il codice sopra riportato è usato per verificare se 'SelectedValue' è" valido "w.r.t. la proprietà 'DataType' dell'origine dati sottostante. Dato che questi ComboBox personalizzati compaiono ovunque, ottengo MOLTE eccezioni lanciate tutto il tempo. – InvisiblePanda
Forse hai creato un duplicato in [http://stackoverflow.com/questions/2961656/generic-tryparse](http://stackoverflow.com/questions/2961656/generic-tryparse) – Dbuggy