69 votos

TryParse elegante

Siento que cada vez que uso TryParse resulta en un código algo feo. Principalmente lo estoy usando de esta manera:

 int value;
if (!int.TryParse(someStringValue, out value))
{
    value = 0;
}

¿Existe alguna solución más elegante para analizar todos los tipos de datos básicos? Para ser específico, ¿hay alguna manera de realizar un análisis a prueba de fallas en una línea? A prueba de fallos, supongo que se establece el valor predeterminado si el análisis falla sin excepción.

Por cierto, esto es para los casos en los que debo realizar alguna acción incluso si el análisis falla, simplemente usando el valor predeterminado.

178voto

dav_i Puntos 6206

Esto es válido y puede que lo prefiera si le gustan los de una sola línea:

 int i = int.TryParse(s, out i) ? i : 42;

Esto establece el valor de i en 42 si no puede analizar la cadena s ; de lo contrario, establece i = i .

21voto

user287107 Puntos 4383

¿Qué tal un método de extensión directo?

 public static class Extensions
{
    public static int? TryParse(this string Source)
    {
        int result;
        if (int.TryParse(Source, out result))
            return result;
        else

            return null;
    }
}

o con la nueva sintaxis de c # en una sola línea:

 public static int? TryParse(this string Source) => int.TryParse(Source, out int result) ? result : (int?)null;

uso:

 v = "234".TryParse() ?? 0

13voto

Antonio Bakula Puntos 12301

Hay una pequeña característica agradable en C # 6 C # 7, Expresiones de declaración , por lo que en C # 7 en lugar de:

 int x;
if (int.TryParse("123", out x))
{
  DoSomethingWithX(x);
}

nosotros podemos usar:

 if (int.TryParse("123", out int x))
{
  DoSomethingWithX(x);
}

Lo suficientemente bueno para mí :)

3voto

Jason Williams Puntos 31901

En su ejemplo particular, puede hacer esto:

 int value; 
int.TryParse(someStringValue, out value);

... porque Int32.TryParse () está documentado como configuración value=0 si falla el análisis.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X