Sólo estoy curiosidades en cuanto a si hay algo integrado en el lenguaje c# o el .net framework que las pruebas para ver si algo es un entero

if (x is an int)
   //Do something

A mí me parece que podría ser, pero yo soy sólo un primer año de programación de estudiante, así que no sé.

  • ¿Cuál es el tipo de x en el código?
  • gracias por la edición Holterman, me han aclarado.
InformationsquelleAutor Alex | 2009-11-17

10 Comentarios

  1. 142

    Utilizar el int.TryParse método.

    string x = "42";
    int value;
    if(int.TryParse(x, out value))
      //Do something

    Con éxito si se analiza devolverá true, y el resultado será su valor como un número entero.

    • Oh bien, que es impresionante, gracias!
    • gracias por la aclaración.
    • Tienen un método TryParse para otros tipos de variables así? Y es considerado una buena práctica de programación para utilizar este método?
    • Muchas otras .NETO de los tipos primitivos (UInt64, Double, …) tiene una TryParse método así. Si usted tiene una cadena, utilizando TryParse es generalmente la mejor práctica para convertirlo en uno de estos tipos.
    • pruebe su intellisense. Se puede demostrar que todos los miembros de cada clase como tipo.
    • Yo todavía estoy recibiendo valor negativo el uso de este método. Se puede saber ¿cómo debo ignorar valor [email protected]
    • Un entero negativo es todavía un número entero válido. Si desea ignorar simplemente hacer una < 0 de verificación.
    • Sí que hice y gracias por la respuesta @Brandon

  2. 15

    Creo que recuerdo ver una comparación de rendimiento entre int.TryParse e int.Analizar Regex y char.IsNumber y char.IsNumber fue el más rápido. En cualquier caso, sea cual sea el rendimiento, he aquí una forma más de hacerlo.

            bool isNumeric = true;
            foreach (char c in "12345")
            {
                if (!Char.IsNumber(c))
                {
                    isNumeric = false;
                    break;
                }
            }
    • Cero el rendimiento de comentarios en TryParse sólo se aplica a int.Analizar, Regex y char.IsNumber. La referencia que yo pensaba de vino antes .NET 2.0 cuando TryParse no existe todavía.
    • Aquí es un buen sitio de referencia de cp que muestra algunas de las distintas maneras que usted puede lograr esto. codeproject.com/KB/cs/csharp-isnumeric.aspx
    • Gracias por la referencia.
    • una cadena vacía es validado como un número aquí, usted debe comenzar con isNumeric = false
    • Una cadena que contiene un valor negativo no serán validados.
  3. 11

    Si quieres chequear tipo de pasado variable, que probablemente podría utilizar:

        var a = 2;
        if (a is int)
        {
            //is integer
        }
        //or:
        if (a.GetType() == typeof(int))
        {
            //is integer
        }
    • Sí, creo que realmente depende de lo que inicialmente se declara la variable x como.
    • ninguno de estos trabajó para mí. Cuando me miraba en él. GetType() regresaba int64 pero typeof(int) devuelve int32. im que va a suponer que la primera si hace lo mismo
  4. 11

    Para Wil P de la solución (ver arriba) también se puede utilizar LINQ.

    var x = "12345";
    var isNumeric = !string.IsNullOrEmpty(x) && x.All(Char.IsDigit);
    • Una cadena que contiene un valor negativo no va a validar.
    • Sí, tienes razón, este no es un número entero de prueba. Yo simplemente simplificada de la propuesta por Wil P.
    • Buena solución para aquellos que buscan una simple prueba de un entero positivo, como una numérico número de registro. Gracias!
  5. 3

    su simple… el uso de esta pieza de código

    bool anyname = your_string_Name.All(char.IsDigit);

    devolverá true si la cadena tiene entero de otra manera falsa…

    • Esto se comprueba para asegurarse de que todos los caracteres de la cadena son dígitos, pero no maneja números negativos, números con un (no-op) que conduce +, o alrededor de un espacio en blanco. (El resultado de la variable es también confusamente llamado.) Estoy tentado también ding para no incluyendo por ejemplo, 0.0 o 1,000(/1.000 si usted está en determinadas localizaciones), pero TryParse no tanto, así que supongo que no peor.
  6. 2

    Esta función le dirá si la cadena contiene SOLO los personajes 0123456789.

    private bool IsInt(string sVal)
    {
        foreach (char c in sVal)
        {
             int iN = (int)c;
             if ((iN > 57) || (iN < 48))
                return false;
        }
        return true;
    }

    Esto es diferente de int.TryParse() que te dirá si tu cadena PODRÍA SER un número entero.

    por ejemplo. «123\r\n» devolverá TRUE de int.TryParse (), pero FALSO de la función anterior.

    …Sólo depende de la pregunta que necesita una respuesta.

  7. 1
    private bool isNumber(object p_Value)
        {
            try
            {
                if (int.Parse(p_Value.ToString()).GetType().Equals(typeof(int)))
                    return true;
                else
                    return false;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

    Algo que escribí hace un tiempo. Algunos buenos ejemplos de arriba, pero solo mis 2 centavos.

    • Esto podría ser útil en el interior de los árboles de expresión cuando el parámetro no está permitido.
  8. 1

    Si sólo quiero comprobar si es una cadena o no, usted puede colocar una «int» palabras clave directamente en el interior de una llamada de método. De acuerdo a dotnetperls.com sitio web, las versiones anteriores de C# no permite esta sintaxis. Haciendo esto, usted puede reducir el número de línea del programa.

    string x = "text or int";
    if (int.TryParse(x, out int output))
    {
      //Console.WriteLine(x);
      //x is an int
      //Do something
    }
    else
    {
      //x is not an int
    }

    Si usted también desea obtener los valores int, usted puede escribir como este.

    Método 1

    string x = "text or int";
    int value = 0;
    if(int.TryParse(x, out value))
    {
      //x is an int
      //Do something
    }
      else
    {
      //x is not an int
    }

    Método 2

    string x = "text or int";
    int num = Convert.ToInt32(x);
    Console.WriteLine(num);

    Referece: https://www.dotnetperls.com/parse

  9. 1

    Tal vez esto puede ser otra solución

    try
    {
        Console.Write("write your number : ");
        Console.WriteLine("Your number is : " + int.Parse(Console.ReadLine()));
    }
    catch (Exception x)
    {
        Console.WriteLine(x.Message);
    }
    Console.ReadLine();
  10. 0

    He sido de codificación por alrededor de 2 semanas y creó una lógica simple para validar un número entero ha sido aceptada.

        Console.WriteLine("How many numbers do you want to enter?"); //request a number
        string input = Console.ReadLine(); //set the input as a string variable
        int numberTotal; //declare an int variable
    
        if (!int.TryParse(input, out numberTotal)) //process if input was an invalid number
        {
            while (numberTotal  < 1) //numberTotal is set to 0 by default if no number is entered
            {
                Console.WriteLine(input + " is an invalid number."); //error message
                int.TryParse(Console.ReadLine(), out numberTotal); //allows the user to input another value
            }
    
        } //this loop will repeat until numberTotal has an int set to 1 or above

    también se podría utilizar el de arriba en un bucle FOR, si usted prefiere no declarar una acción como el tercer parámetro del circuito, tales como

        Console.WriteLine("How many numbers do you want to enter?");
        string input2 = Console.ReadLine();
    
        if (!int.TryParse(input2, out numberTotal2))
        {
            for (int numberTotal2 = 0; numberTotal2 < 1;)
            {
                Console.WriteLine(input2 + " is an invalid number.");
                int.TryParse(Console.ReadLine(), out numberTotal2);
            }
    
        }

    si usted no desea un bucle, simplemente quitar el bucle completo llave de

Dejar respuesta

Please enter your comment!
Please enter your name here