Est-il un générique Parse() de la fonction qui vous permet de convertir une chaîne de caractères à n'importe quel type en utilisant l'analyser?
Je veux convertir une chaîne de caractères à un type générique comme int
ou date
ou long
basé sur le générique de type de retour.
Essentiellement une fonction comme Parse<T>(String)
qui renvoie un objet de type T
.
Par exemple, si un int a été passé à la fonction est de faire int.parse
en interne.
Vous devez vous connecter pour publier un commentaire.
Système.Convertir des.ChangeType
Que par votre exemple, vous pourriez faire:
Pour satisfaire votre "générique type de retour" exigence, vous pouvez écrire votre propre méthode d'extension:
Cela vous permettra de faire:
IConvertable
ne devriez-vous pas aussi de contraindre laT
, c'est à direT ChangeType<T>(this object obj) where T : IConvertable
?obj
qui doit êtreIConvertible
, mais il n'y a aucun moyen de spécifier qu'au moment de la compilation.1
comme une valeur booléenne. Est-il un générique façon de gérer tous les types de valeurBien on dirait que je suis trop en retard pour répondre sur ce fil. Mais ici, c'est ma mise en œuvre:
En gros, j'ai créé une Extension de la méthode de la classe Object. Il traite de tous les types, j'.e nullable, des classes et des struct.
System.Convert.ChangeType
n'est pas de convertir n'importe quel type. Pensez à ce qui suit:Ces conversions sont possibles avec cette mise en œuvre de ChangeType.
plus propre version de Pranay réponse
Il ya un couple de conventions dans les .NET pour convertir les objets d'un type à l'autre.
Mais ces méthodes sont beaucoup plus lent que votre typique
T.Parse(string)
, cause de la boxe et beaucoup d'allocations à chaque fois que vous voulez les convertir en une valeur unique.Pour ValueString, j'ai choisi d'en trouver un convenable, l'analyse statique méthode du type à l'aide de la réflexion, de construire une expression lambda de l'appelant et le cache de la compilation des délégué pour une utilisation ultérieure (Voir cette réponse pour un exemple).
Il a également issues de la manière que je l'ai mentionné ci-dessus, si le type n'a pas un adapté à l'analyse de la méthode (Voir la les performances de l'article dans le fichier readme).