Il me semble qu'il serait préférable d'avoir une méthode surchargée dans ce cas. TryParse
- Int32.TryParse
est une méthode totalement différente de Int64.TryParse
etc. Cela vous éloignera aussi de la double distribution (que je suis d'accord est laide, mais malheureusement difficile à éviter). Cela signifie également que vous spécifieriez quels types vous pouvez vraiment soutenir.
Une alternative consiste à utiliser un Dictionary<Type, Func<string, object>>
:
// Add some error checking, obviously :)
Func<string, object> parser = parsers[typeof(T)];
return (T) parser(form.Text);
puis mis en place le dictionnaire avec quelque chose comme:
static readonly Dictionary<Type, Func<string, object>> parsers =
new Dictionary<Type, Func<string, object>>()
{
{ typeof(int), x => int.Parse(x) },
{ typeof(TimeSpan) x => new TimeSpan(0, 1, 0) },
...
}
Si vous souhaitez utiliser TryParse
au lieu de Parse
, vous devrez créer votre propre type de délégué en raison de l'utilisation de paramètres out (qui ne sont pas pris en charge dans Func
/Action
). La vie devient un peu plus difficile à ce moment-là. En outre, pourquoi utilisez-vous un paramètre out
au lieu d'une valeur de retour?
Quelle est l'erreur de compilation? – Ucodia