Cómo desinfectar las entradas de la consola en C #

Aquí hay cuatro métodos para hacer lo que quieras. La siguiente solución funciona positiva y negativa para integrales.

Debajo de este fragmento hay otro que funciona tanto para integrales como para valores decimales.

utilizando el sistema;
usando System.Text.RegularExpressions;

Programa de clase
{
vacío estático Main (string [] args)
{
¿largo? n = nulo;

tratar
{
var s = Console.ReadLine ();

// Descomenta el método que te gustaría usar
// n = Método1 (s);
// n = Método2 (s);
// n = Método3 (s);
// n = Método4 (s);
// Console.WriteLine (n);
}
catch (FormatException f)
{
Console.WriteLine (f.Message);
}
catch (OverflowException o)
{
Console.WriteLine (o.Message);
}
atrapar (Excepción ex)
{
Console.WriteLine (por ejemplo, ToString ());
}
}

Método largo estático1 (cadena s)
{
retorno largo. Grueso (s);
}

Método largo estático2 (cadena s)
{
largo n = 0;

var b = long. TryParse (s, out n);

if (! b) arroja una nueva FormatException ();

volver n;
}

Método largo estático3 (cadena s)
{
devuelve Convert.ToInt64 (s);
}

Método largo estático 4 (cadena s)
{
var match = Regex.Match (s, @ “\ -? \ d +”);

if (! match.Success) arroja una nueva FormatException ();

return long.Parse (match.Value);
}
}

Si desea aceptar cualquier número real, ya sea integral o decimal, no use el fragmento de arriba. Use el de abajo en su lugar.

utilizando el sistema;
usando System.Text.RegularExpressions;

Programa de clase
{
vacío estático Main (string [] args)
{
¿doble? n = nulo;

tratar
{
var s = Console.ReadLine ();

// Descomenta el método que te gustaría usar
// n = Método1 (s);
// n = Método2 (s);
// n = Método3 (s);
n = Método 4 (s);
Console.WriteLine (n);
}
catch (FormatException f)
{
Console.WriteLine (f.Message);
}
catch (OverflowException o)
{
Console.WriteLine (o.Message);
}
atrapar (Excepción ex)
{
Console.WriteLine (por ejemplo, ToString ());
}
}

Método doble estático1 (cadena s)
{
return double.Parse (s);
}

Método doble estático2 (cadena s)
{
doble n = 0;

var b = doble. TryParse (s, fuera n);

if (! b) arroja una nueva FormatException ();

volver n;
}

Método doble estático3 (cadena s)
{
devuelve Convert.ToDouble (s);
}

Método doble estático 4 (cadena s)
{
var match = Regex.Match (s, @ “\ -? \ d * \.? \ d *”);

if (! match.Success) arroja una nueva FormatException ();

return double.Parse (match.Value);
}
}

Puede usar el método simple a continuación, una vez que el usuario ingrese el número, envíe ese valor de cadena a este método y verifique si el valor de retorno es verdadero o falso, si es falso, puede mostrar el error al usuario y solicitar una nueva entrada.

Retazo

public static bool IsValidDouble (string val)
{
doble stock;
return Double. TryParse (val, fuera de stock);
}

Mire el método estático TryParse de cada tipo numérico (por ejemplo, Int32. TryParse). Esto le dirá si la cadena se puede analizar en el tipo numérico en cuestión.