.Net framework contient une grande classe nommée Convert qui permet la conversion entre types simples, type DateTime et type de chaîne. Aussi la conversion en support de classe des types implémentant l'interface IConvertible.Conversion d'une chaîne en un type simple
La classe a été implémentée dans la toute première version du framework .Net. Il y avait quelques choses dans le premier framework .Net qui n'étaient pas faites correctement. Par exemple, les méthodes .Parse sur des types simples lèveraient une exception si la chaîne ne pouvait pas être analysée et il n'y aurait aucun moyen de vérifier si une exception serait projetée à l'avance.
Une future version de .Net Framework a supprimé cette lacune en présentant la méthode TryParse qui a résolu ce problème. La classe Convert remonte à l'ancienne méthode Parse, donc la méthode ChangeType de cette classe dans l'ancien style implémenté - si la conversion ne peut pas être effectuée, une exception est levée.
Jetez un oeil sur le code suivant:
public static T ConvertString<T>(string s, T @default)
{
try
{
return (T)Convert.ChangeType(s, typeof(T), CultureInfo.InvariantCulture);
}
catch (Exception)
{
return @default;
}
}
Ce code fait essentiellement ce que je veux. Cependant j'aimerais beaucoup éviter les laids essayer/attraper ici. Je suis sûr que, semblable à TryParse, il existe une méthode moderne de réécriture de ce code sans le fourre-tout. Pourriez-vous en suggérer un?
Il n'y a pas de honte à utiliser un try/catch si cela n'arrive que rarement, par exemple si quelque chose est dans le mauvais format. C'est si vous frappez la prise la plupart du temps vous avez des problèmes de performance. – Chris
Oui, ce serait une autre raison pour laquelle j'aimerais l'éviter. Parfois, il est difficile de prédire comment et où votre code va être utilisé/appelé, donc vous voulez le faire "bien". –