Élégant TryParse
J'ai l'impression que chaque fois que j'utilise TryParse
qu'il en résulte un peu laid code. Surtout, je suis l'aide de cette façon:
int value;
if (!int.TryParse(someStringValue, out value))
{
value = 0;
}
Est-il une solution plus élégante pour l'analyse de tous les types de données de base, pour être précis il y a un moyen de faire fail safe analyse en une ligne? En fail safe je suppose paramètre valeur par défaut si l'analyse échoue sans exception.
Par la voie, c'est pour le cas où je dois faire un peu d'action, même si l'analyse échoue, juste à l'aide de la valeur par défaut.
- Btw, registre de sens
- La valeur par défaut pour le type int est de 0 et est utilisé avec un paramètre de sortie, mais de toute façon: stackoverflow.com/a/1078521/284240
- parfois, il n'est pas de type valeur par défaut, ne pas parler spécifiquement pour les int, mais d'autres types de données
- Ensuite, utilisez Jon Skeets approche dans mon lien et de l'utilisation ref paramètre dans votre propre
TryParse
.
Vous devez vous connecter pour publier un commentaire.
Ceci est valable et vous préférerez peut-être si vous avez le goût pour le seul-liners:
Cela définit la valeur de
i
à42
si elle ne peut pas analyser la chaînes
, sinon il définiti = i
.Dim i As Int32 = If(Int32.TryParse("nonum", i), i, 42)
. Merci.return int.TryParse(s, out int i) ? i : 42;
TryParse
retourne false, mais le tertiaire, l'opérateur vous demande de compte pour les deux cas.comment sur une extension directe de la méthode?
utilisation:
Vous pouvez écrire vos propres méthodes pour une solution qui vous convient le mieux. Je suis tombé sur le
Maybe
classe qui encapsule leTryParse
méthodes tout à l'heure.ou spécifier la valeur par défaut en-ligne:
Observer la distinction entre
Nullable<int>
/int?
etint
.Voir http://www.kodefuguru.com/post/2010/06/24/TryParse-vs-Convert.aspx pour plus d'info
Il y a une belle petite fonctionnalité en
C# 6C# 7, Déclaration des expressions, donc en C# 7 au lieu de:on peut utiliser:
Assez agréable pour moi 🙂
Vous pouvez utiliser TypeDescriptor à la place:
Vous pourrait contraindre
T
à la structure et à l'utilisationNullable
également (comme par @skarmats réponse).Convert<T>(string input, T defaultVal = default(T))
et la deuxième méthode peut être retiré.Dans votre exemple, vous pouvez faire ceci:
...parce que Int32.TryParse() est décrite comme paramètre
value=0
si elle ne parvient pas à l'analyser.C'est l'une des belles surprises pour les développeurs C# qui essaient de F#.
La méthode TryParse retourne un tuple contenant à la fois le bool et de la valeur.
à l'aide de C# 7 en ligne
Exemple De Méthode: