Compartir a través de


Int32.TryParse Método

Definición

Convierte la representación de cadena de un número en su entero de 32 bits con signo equivalente. Un valor devuelto indica si la operación se realizó correctamente.

Sobrecargas

TryParse(String, IFormatProvider, Int32)

Intenta analizar una cadena en un valor.

TryParse(ReadOnlySpan<Char>, Int32)

Convierte la representación de intervalo de un número en un formato específico de la referencia cultural a su entero de 32 bits con signo equivalente. Un valor devuelto indica si la conversión se realizó correctamente.

TryParse(String, Int32)

Convierte la representación de cadena de un número en su entero de 32 bits con signo equivalente. Un valor devuelto indica si la conversión se realizó correctamente.

TryParse(ReadOnlySpan<Byte>, IFormatProvider, Int32)

Intenta analizar un intervalo de caracteres UTF-8 en un valor.

TryParse(ReadOnlySpan<Char>, IFormatProvider, Int32)

Intenta analizar un intervalo de caracteres en un valor.

TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Int32)

Intenta analizar un intervalo de caracteres UTF-8 en un valor.

TryParse(ReadOnlySpan<Byte>, Int32)

Intenta convertir un intervalo de caracteres UTF-8 que contenga la representación de cadena de un número en su entero de 32 bits con signo equivalente.

TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Int32)

Convierte la representación de intervalo de un número en un estilo y formato específico de la referencia cultural especificados en su entero de 32 bits con signo equivalente. Un valor devuelto indica si la conversión se realizó correctamente.

TryParse(String, NumberStyles, IFormatProvider, Int32)

Convierte la representación de cadena de un número en un estilo y formato específico de la referencia cultural especificados en su entero de 32 bits con signo equivalente. Un valor devuelto indica si la conversión se realizó correctamente.

TryParse(String, IFormatProvider, Int32)

Source:
Int32.cs
Source:
Int32.cs
Source:
Int32.cs

Intenta analizar una cadena en un valor.

public:
 static bool TryParse(System::String ^ s, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result) = IParsable<int>::TryParse;
public static bool TryParse (string? s, IFormatProvider? provider, out int result);
static member TryParse : string * IFormatProvider * int -> bool
Public Shared Function TryParse (s As String, provider As IFormatProvider, ByRef result As Integer) As Boolean

Parámetros

s
String

Cadena que se va a analizar.

provider
IFormatProvider

Objeto que proporciona información de formato específica de la referencia cultural sobre s.

result
Int32

Cuando este método devuelve, contiene el resultado de analizar correctamente s o un valor indefinido en caso de error.

Devoluciones

true si s se ha analizado correctamente; de lo contrario, false.

Se aplica a

TryParse(ReadOnlySpan<Char>, Int32)

Source:
Int32.cs
Source:
Int32.cs
Source:
Int32.cs

Convierte la representación de intervalo de un número en un formato específico de la referencia cultural a su entero de 32 bits con signo equivalente. Un valor devuelto indica si la conversión se realizó correctamente.

public:
 static bool TryParse(ReadOnlySpan<char> s, [Runtime::InteropServices::Out] int % result);
public static bool TryParse (ReadOnlySpan<char> s, out int result);
static member TryParse : ReadOnlySpan<char> * int -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), ByRef result As Integer) As Boolean

Parámetros

s
ReadOnlySpan<Char>

Intervalo que contiene los caracteres que representan el número que se va a convertir.

result
Int32

Cuando este método devuelve, contiene el valor entero con signo de 32 bits equivalente al número contenido en s, si la conversión se realizó correctamente o cero si se produjo un error en la conversión. Se produce un error en la conversión si el parámetro s es null o Empty o representa un número menor que Int32.MinValue o mayor que Int32.MaxValue. Este parámetro se pasa sin inicializar; cualquier valor proporcionado originalmente en result se sobrescribirá.

Devoluciones

true si s se convirtió correctamente; de lo contrario, false.

Se aplica a

TryParse(String, Int32)

Source:
Int32.cs
Source:
Int32.cs
Source:
Int32.cs

Convierte la representación de cadena de un número en su entero de 32 bits con signo equivalente. Un valor devuelto indica si la conversión se realizó correctamente.

public:
 static bool TryParse(System::String ^ s, [Runtime::InteropServices::Out] int % result);
public static bool TryParse (string s, out int result);
public static bool TryParse (string? s, out int result);
static member TryParse : string * int -> bool
Public Shared Function TryParse (s As String, ByRef result As Integer) As Boolean

Parámetros

s
String

Cadena que contiene un número que se va a convertir.

result
Int32

Cuando este método devuelve, contiene el valor entero con signo de 32 bits equivalente al número contenido en s, si la conversión se realizó correctamente o cero si se produjo un error en la conversión. Se produce un error en la conversión si el parámetro s es null o Empty, no tiene el formato correcto o representa un número menor que Int32.MinValue o mayor que Int32.MaxValue. Este parámetro se pasa sin inicializar; cualquier valor proporcionado originalmente en result se sobrescribirá.

Devoluciones

true si s se convirtió correctamente; de lo contrario, false.

Ejemplos

En el ejemplo siguiente se llama al método Int32.TryParse(String, Int32) con varios valores de cadena diferentes.

using namespace System;


   void TryToParse(String^ value)
   {
      Int32 number;
      bool result = Int32::TryParse(value, number);
      if (result) {
         Console::WriteLine("Converted '{0}' to {1}.", value, number);
      }
      else {
         if (value == nullptr) value = "";
         Console::WriteLine("Attempted conversion of '{0}' failed.", value);
      }
   }


void main()
{
      TryToParse(nullptr);
      TryToParse("160519");
      TryToParse("9432.0");
      TryToParse("16,667");
      TryToParse("   -322   ");
      TryToParse("+4302");
      TryToParse("(100);");
      TryToParse("01FA");
}
// The example displays the following output:
//      Attempted conversion of '' failed.
//      Converted '160519' to 160519.
//      Attempted conversion of '9432.0' failed.
//      Attempted conversion of '16,667' failed.
//      Converted '   -322   ' to -322.
//      Converted '+4302' to 4302.
//      Attempted conversion of '(100);' failed.
//      Attempted conversion of '01FA' failed.
using System;

public class Example
{
   public static void Main()
   {
      string[] values = { null, "160519", "9432.0", "16,667",
                          "   -322   ", "+4302", "(100);", "01FA" };
      foreach (var value in values)
      {
         int number;

         bool success = int.TryParse(value, out number);
         if (success)
         {
            Console.WriteLine($"Converted '{value}' to {number}.");
         }
         else
         {
            Console.WriteLine($"Attempted conversion of '{value ?? "<null>"}' failed.");
         }
      }
   }
}
// The example displays the following output:
//       Attempted conversion of '<null>' failed.
//       Converted '160519' to 160519.
//       Attempted conversion of '9432.0' failed.
//       Attempted conversion of '16,667' failed.
//       Converted '   -322   ' to -322.
//       Converted '+4302' to 4302.
//       Attempted conversion of '(100);' failed.
//       Attempted conversion of '01FA' failed.
open System

let values = 
   [ null; "160519"; "9432.0"; "16,667"
     "   -322   "; "+4302"; "(100);"; "01FA" ]
for value in values do
    match Int32.TryParse value with
    | true, number -> 
        printfn $"Converted '{value}' to {number}."
    | _ -> 
        printfn $"""Attempted conversion of '{if isNull value then "<null>" else value}' failed."""
         
// The example displays the following output:
//       Attempted conversion of '<null>' failed.
//       Converted '160519' to 160519.
//       Attempted conversion of '9432.0' failed.
//       Attempted conversion of '16,667' failed.
//       Converted '   -322   ' to -322.
//       Converted '+4302' to 4302.
//       Attempted conversion of '(100);' failed.
//       Attempted conversion of '01FA' failed.
Module Example
   Public Sub Main()
      Dim values() As String = { Nothing, "160519", "9432.0", "16,667",
                                 "   -322   ", "+4302", "(100);", 
                                 "01FA" }

      For Each value In values
         Dim number As Integer
    
         Dim success As Boolean = Int32.TryParse(value, number)
         If success Then
            Console.WriteLine("Converted '{0}' to {1}.", value, number)
         Else
            Console.WriteLine("Attempted conversion of '{0}' failed.", 
                              If(value ,"<null>"))
         End If     
      Next
   End Sub
End Module
' The example displays the following output to the console:
'       Attempted conversion of '<null>' failed.
'       Converted '160519' to 160519.
'       Attempted conversion of '9432.0' failed.
'       Attempted conversion of '16,667' failed.
'       Converted '   -322   ' to -322.
'       Converted '+4302' to 4302.
'       Attempted conversion of '(100)' failed.
'       Attempted conversion of '01FA' failed.

Algunas de las cadenas que el método TryParse(String, Int32) no puede convertir en este ejemplo son:

  • "9432.0". Se produce un error en la conversión porque la cadena no puede contener un separador decimal; solo debe contener dígitos enteros.

  • "16,667". Se produce un error en la conversión porque la cadena no puede contener separadores de grupo; solo debe contener dígitos enteros.

  • "(100)". Se produce un error en la conversión porque la cadena no puede contener un signo negativo distinto del definido por las propiedades NumberFormatInfo.NegativeSign y NumberFormatInfo.NumberNegativePattern de la referencia cultural actual.

  • "01FA". Se produce un error en la conversión porque la cadena no puede contener dígitos hexadecimales; solo debe contener dígitos decimales.

Comentarios

El método TryParse es similar al método Parse, salvo que el método TryParse no produce una excepción si se produce un error en la conversión. Elimina la necesidad de usar el control de excepciones para probar un FormatException en caso de que s no sea válido y no se pueda analizar correctamente.

El parámetro s contiene un número del formulario:

[ws] [sign]digits[ws]

Los elementos entre corchetes ([ y ]) son opcionales. En la tabla siguiente se describe cada elemento.

Elemento Descripción
ws Espacio en blanco opcional.
de signo Un signo opcional.
de dígitos de Secuencia de dígitos que van de 0 a 9.

El parámetro s se interpreta mediante el estilo NumberStyles.Integer. Además de los dígitos decimales, solo se permiten espacios iniciales y finales junto con un signo inicial. Para definir explícitamente los elementos de estilo junto con la información de formato específica de la referencia cultural que puede estar presente en s, use el método Int32.TryParse(String, NumberStyles, IFormatProvider, Int32).

El parámetro s se analiza mediante la información de formato de un objeto NumberFormatInfo inicializado para la referencia cultural del sistema actual. Para obtener más información, consulte CurrentInfo.

Esta sobrecarga del método TryParse interpreta todos los dígitos del parámetro s como dígitos decimales. Para analizar la representación de cadena de un número hexadecimal, llame a la sobrecarga Int32.TryParse(String, NumberStyles, IFormatProvider, Int32).

Consulte también

Se aplica a

TryParse(ReadOnlySpan<Byte>, IFormatProvider, Int32)

Source:
Int32.cs
Source:
Int32.cs

Intenta analizar un intervalo de caracteres UTF-8 en un valor.

public:
 static bool TryParse(ReadOnlySpan<System::Byte> utf8Text, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result) = IUtf8SpanParsable<int>::TryParse;
public static bool TryParse (ReadOnlySpan<byte> utf8Text, IFormatProvider? provider, out int result);
static member TryParse : ReadOnlySpan<byte> * IFormatProvider * int -> bool
Public Shared Function TryParse (utf8Text As ReadOnlySpan(Of Byte), provider As IFormatProvider, ByRef result As Integer) As Boolean

Parámetros

utf8Text
ReadOnlySpan<Byte>

Intervalo de caracteres UTF-8 que se van a analizar.

provider
IFormatProvider

Objeto que proporciona información de formato específica de la referencia cultural sobre utf8Text.

result
Int32

Al devolver, contiene el resultado de analizar correctamente utf8Text o un valor indefinido en caso de error.

Devoluciones

true si utf8Text se ha analizado correctamente; de lo contrario, false.

Se aplica a

TryParse(ReadOnlySpan<Char>, IFormatProvider, Int32)

Source:
Int32.cs
Source:
Int32.cs
Source:
Int32.cs

Intenta analizar un intervalo de caracteres en un valor.

public:
 static bool TryParse(ReadOnlySpan<char> s, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result) = ISpanParsable<int>::TryParse;
public static bool TryParse (ReadOnlySpan<char> s, IFormatProvider? provider, out int result);
static member TryParse : ReadOnlySpan<char> * IFormatProvider * int -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), provider As IFormatProvider, ByRef result As Integer) As Boolean

Parámetros

s
ReadOnlySpan<Char>

Intervalo de caracteres que se va a analizar.

provider
IFormatProvider

Objeto que proporciona información de formato específica de la referencia cultural sobre s.

result
Int32

Cuando este método devuelve , contiene el resultado de analizar correctamente so un valor indefinido en caso de error.

Devoluciones

true si s se ha analizado correctamente; de lo contrario, false.

Se aplica a

TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Int32)

Source:
Int32.cs
Source:
Int32.cs

Intenta analizar un intervalo de caracteres UTF-8 en un valor.

public:
 static bool TryParse(ReadOnlySpan<System::Byte> utf8Text, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result) = System::Numerics::INumberBase<int>::TryParse;
public static bool TryParse (ReadOnlySpan<byte> utf8Text, System.Globalization.NumberStyles style, IFormatProvider? provider, out int result);
static member TryParse : ReadOnlySpan<byte> * System.Globalization.NumberStyles * IFormatProvider * int -> bool
Public Shared Function TryParse (utf8Text As ReadOnlySpan(Of Byte), style As NumberStyles, provider As IFormatProvider, ByRef result As Integer) As Boolean

Parámetros

utf8Text
ReadOnlySpan<Byte>

Intervalo de caracteres UTF-8 que se van a analizar.

style
NumberStyles

Combinación bit a bit de estilos de número que pueden estar presentes en utf8Text.

provider
IFormatProvider

Objeto que proporciona información de formato específica de la referencia cultural sobre utf8Text.

result
Int32

Al devolver, contiene el resultado de analizar correctamente utf8Text o un valor indefinido en caso de error.

Devoluciones

true si utf8Text se ha analizado correctamente; de lo contrario, false.

Se aplica a

TryParse(ReadOnlySpan<Byte>, Int32)

Source:
Int32.cs
Source:
Int32.cs

Intenta convertir un intervalo de caracteres UTF-8 que contenga la representación de cadena de un número en su entero de 32 bits con signo equivalente.

public:
 static bool TryParse(ReadOnlySpan<System::Byte> utf8Text, [Runtime::InteropServices::Out] int % result);
public static bool TryParse (ReadOnlySpan<byte> utf8Text, out int result);
static member TryParse : ReadOnlySpan<byte> * int -> bool
Public Shared Function TryParse (utf8Text As ReadOnlySpan(Of Byte), ByRef result As Integer) As Boolean

Parámetros

utf8Text
ReadOnlySpan<Byte>

Intervalo que contiene los caracteres UTF-8 que representan el número que se va a convertir.

result
Int32

Cuando este método devuelve, contiene el valor entero con signo de 32 bits equivalente al número contenido en utf8Text si la conversión se realizó correctamente o cero si se produjo un error en la conversión. Este parámetro se pasa sin inicializar; Cualquier valor proporcionado originalmente en el resultado se sobrescribirá.

Devoluciones

true si utf8Text se convirtió correctamente; de lo contrario, false.

Se aplica a

TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Int32)

Source:
Int32.cs
Source:
Int32.cs
Source:
Int32.cs

Convierte la representación de intervalo de un número en un estilo y formato específico de la referencia cultural especificados en su entero de 32 bits con signo equivalente. Un valor devuelto indica si la conversión se realizó correctamente.

public:
 static bool TryParse(ReadOnlySpan<char> s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result);
public:
 static bool TryParse(ReadOnlySpan<char> s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result) = System::Numerics::INumberBase<int>::TryParse;
public static bool TryParse (ReadOnlySpan<char> s, System.Globalization.NumberStyles style, IFormatProvider? provider, out int result);
public static bool TryParse (ReadOnlySpan<char> s, System.Globalization.NumberStyles style, IFormatProvider provider, out int result);
static member TryParse : ReadOnlySpan<char> * System.Globalization.NumberStyles * IFormatProvider * int -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), style As NumberStyles, provider As IFormatProvider, ByRef result As Integer) As Boolean

Parámetros

s
ReadOnlySpan<Char>

Intervalo que contiene los caracteres que representan el número que se va a convertir. El intervalo se interpreta mediante el estilo especificado por style.

style
NumberStyles

Combinación bit a bit de valores de enumeración que indica los elementos de estilo que pueden estar presentes en s. Un valor típico que se debe especificar es Integer.

provider
IFormatProvider

Objeto que proporciona información de formato específica de la referencia cultural sobre s.

result
Int32

Cuando este método devuelve, contiene el valor entero con signo de 32 bits equivalente al número contenido en s, si la conversión se realizó correctamente o cero si se produjo un error en la conversión. Se produce un error en la conversión si el parámetro s es null o Empty, no está en un formato compatible con styleo representa un número menor que int32.MinValue o mayor que Int32.MaxValue. Este parámetro se pasa sin inicializar; cualquier valor proporcionado originalmente en result se sobrescribirá.

Devoluciones

true si s se convirtió correctamente; de lo contrario, false.

Se aplica a

TryParse(String, NumberStyles, IFormatProvider, Int32)

Source:
Int32.cs
Source:
Int32.cs
Source:
Int32.cs

Convierte la representación de cadena de un número en un estilo y formato específico de la referencia cultural especificados en su entero de 32 bits con signo equivalente. Un valor devuelto indica si la conversión se realizó correctamente.

public:
 static bool TryParse(System::String ^ s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result);
public:
 static bool TryParse(System::String ^ s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result) = System::Numerics::INumberBase<int>::TryParse;
public static bool TryParse (string s, System.Globalization.NumberStyles style, IFormatProvider provider, out int result);
public static bool TryParse (string? s, System.Globalization.NumberStyles style, IFormatProvider? provider, out int result);
static member TryParse : string * System.Globalization.NumberStyles * IFormatProvider * int -> bool
Public Shared Function TryParse (s As String, style As NumberStyles, provider As IFormatProvider, ByRef result As Integer) As Boolean

Parámetros

s
String

Cadena que contiene un número que se va a convertir. La cadena se interpreta mediante el estilo especificado por style.

style
NumberStyles

Combinación bit a bit de valores de enumeración que indica los elementos de estilo que pueden estar presentes en s. Un valor típico que se debe especificar es Integer.

provider
IFormatProvider

Objeto que proporciona información de formato específica de la referencia cultural sobre s.

result
Int32

Cuando este método devuelve, contiene el valor entero con signo de 32 bits equivalente al número contenido en s, si la conversión se realizó correctamente o cero si se produjo un error en la conversión. Se produce un error en la conversión si el parámetro s es null o Empty, no está en un formato compatible con styleo representa un número menor que int32.MinValue o mayor que Int32.MaxValue. Este parámetro se pasa sin inicializar; cualquier valor proporcionado originalmente en result se sobrescribirá.

Devoluciones

true si s se convirtió correctamente; de lo contrario, false.

Excepciones

style no es un valor NumberStyles.

-o-

style no es una combinación de valores AllowHexSpecifier y HexNumber.

Ejemplos

En el ejemplo siguiente se llama al método Int32.TryParse(String, NumberStyles, IFormatProvider, Int32) con varios valores de cadena y NumberStyles diferentes.

using namespace System;
using namespace System::Globalization;

void CallTryParse(String^ stringToConvert, NumberStyles styles)
{
      Int32 number;
      CultureInfo^ provider;

      // If currency symbol is allowed, use en-US culture. 
      if (((Int32) (styles & NumberStyles::AllowCurrencySymbol)) > 0)
         provider = gcnew CultureInfo("en-US");
      else
         provider = CultureInfo::InvariantCulture;

      bool result = Int32::TryParse(stringToConvert, styles, 
                                   provider, number);
      if (result)
         Console::WriteLine("Converted '{0}' to {1}.", stringToConvert, number);
      else
         Console::WriteLine("Attempted conversion of '{0}' failed.", 
                           Convert::ToString(stringToConvert));
}

void main()
{
      String^ numericString;
      NumberStyles styles;

      numericString = "106779";
      styles = NumberStyles::Integer;
      CallTryParse(numericString, styles);

      numericString = "-30677";
      styles = NumberStyles::None;
      CallTryParse(numericString, styles);

      styles = NumberStyles::AllowLeadingSign;
      CallTryParse(numericString, styles);

      numericString = "301677-";
      CallTryParse(numericString, styles);

      styles = styles | NumberStyles::AllowTrailingSign;
      CallTryParse(numericString, styles);

      numericString = "$10634";
      styles = NumberStyles::Integer;
      CallTryParse(numericString, styles);

      styles = NumberStyles::Integer | NumberStyles::AllowCurrencySymbol;
      CallTryParse(numericString, styles);

      numericString = "10345.00";
      styles = NumberStyles::Integer | NumberStyles::AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "10345.72";
      styles = NumberStyles::Integer | NumberStyles::AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "22,593"; 
      styles = NumberStyles::Integer | NumberStyles::AllowThousands;
      CallTryParse(numericString, styles);

      numericString = "12E-01";
      styles = NumberStyles::Integer | NumberStyles::AllowExponent;
      CallTryParse(numericString, styles); 

      numericString = "12E03";
      CallTryParse(numericString, styles); 

      numericString = "80c1";
      CallTryParse(numericString, NumberStyles::HexNumber);

      numericString = "0x80C1";
      CallTryParse(numericString, NumberStyles::HexNumber);      
      Console::ReadLine();
}
// The example displays the following output:
//      Converted '106779' to 106779.
//      Attempted conversion of '-30677' failed.
//      Converted '-30677' to -30677.
//      Attempted conversion of '301677-' failed.
//      Converted '301677-' to -301677.
//      Attempted conversion of '$10634' failed.
//      Converted '$10634' to 10634.
//      Converted '10345.00' to 10345.
//      Attempted conversion of '10345.72' failed.
//      Converted '22,593' to 22593.
//      Attempted conversion of '12E-01' failed.
//      Converted '12E03' to 12000.
//      Converted '80c1' to 32961.
//      Attempted conversion of '0x80C1' failed.
using System;
using System.Globalization;

public class StringParsing
{
   public static void Main()
   {
      string numericString;
      NumberStyles styles;

      numericString = "106779";
      styles = NumberStyles.Integer;
      CallTryParse(numericString, styles);

      numericString = "-30677";
      styles = NumberStyles.None;
      CallTryParse(numericString, styles);

      styles = NumberStyles.AllowLeadingSign;
      CallTryParse(numericString, styles);

      numericString = "301677-";
      CallTryParse(numericString, styles);

      styles = styles | NumberStyles.AllowTrailingSign;
      CallTryParse(numericString, styles);

      numericString = "$10634";
      styles = NumberStyles.Integer;
      CallTryParse(numericString, styles);

      styles = NumberStyles.Integer | NumberStyles.AllowCurrencySymbol;
      CallTryParse(numericString, styles);

      numericString = "10345.00";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "10345.72";
      styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
      CallTryParse(numericString, styles);

      numericString = "22,593";
      styles = NumberStyles.Integer | NumberStyles.AllowThousands;
      CallTryParse(numericString, styles);

      numericString = "12E-01";
      styles = NumberStyles.Integer | NumberStyles.AllowExponent;
      CallTryParse(numericString, styles);

      numericString = "12E03";
      CallTryParse(numericString, styles);

      numericString = "80c1";
      CallTryParse(numericString, NumberStyles.HexNumber);

      numericString = "0x80C1";
      CallTryParse(numericString, NumberStyles.HexNumber);
   }

   private static void CallTryParse(string stringToConvert, NumberStyles styles)
   {
      CultureInfo provider;

      // If currency symbol is allowed, use en-US culture.
      if ((styles & NumberStyles.AllowCurrencySymbol) > 0)
         provider = new CultureInfo("en-US");
      else
         provider = CultureInfo.InvariantCulture;

      bool success = int.TryParse(stringToConvert, styles,
                                   provider, out int number);
      if (success)
         Console.WriteLine($"Converted '{stringToConvert}' to {number}.");
      else
         Console.WriteLine($"Attempted conversion of '{stringToConvert}' failed.");
   }
}
// The example displays the following output to the console:
//       Converted '106779' to 106779.
//       Attempted conversion of '-30677' failed.
//       Converted '-30677' to -30677.
//       Attempted conversion of '301677-' failed.
//       Converted '301677-' to -301677.
//       Attempted conversion of '$10634' failed.
//       Converted '$10634' to 10634.
//       Converted '10345.00' to 10345.
//       Attempted conversion of '10345.72' failed.
//       Converted '22,593' to 22593.
//       Attempted conversion of '12E-01' failed.
//       Converted '12E03' to 12000.
//       Converted '80c1' to 32961.
//       Attempted conversion of '0x80C1' failed.
open System
open System.Globalization

let callTryParse (stringToConvert: string) styles =
    let provider =
        // If currency symbol is allowed, use en-US culture.
        if int (styles &&& NumberStyles.AllowCurrencySymbol) > 0 then
            CultureInfo "en-US"
        else
            CultureInfo.InvariantCulture

    match Int32.TryParse(stringToConvert, styles, provider) with
    | true, number ->
        printfn $"Converted '{stringToConvert}' to {number}."
    | _ ->
        printfn $"Attempted conversion of '{stringToConvert}' failed."

[<EntryPoint>]
let main _ =
    let numericString = "106779"
    let styles = NumberStyles.Integer
    callTryParse numericString styles

    let numericString = "-30677"
    let styles = NumberStyles.None
    callTryParse numericString styles

    let styles = NumberStyles.AllowLeadingSign
    callTryParse numericString styles

    let numericString = "301677-"
    callTryParse numericString styles

    let styles = styles ||| NumberStyles.AllowTrailingSign
    callTryParse numericString styles

    let numericString = "$10634"
    let styles = NumberStyles.Integer
    callTryParse numericString styles

    let styles = NumberStyles.Integer ||| NumberStyles.AllowCurrencySymbol
    callTryParse numericString styles

    let numericString = "10345.00"
    let styles = NumberStyles.Integer ||| NumberStyles.AllowDecimalPoint
    callTryParse numericString styles

    let numericString = "10345.72"
    let styles = NumberStyles.Integer ||| NumberStyles.AllowDecimalPoint
    callTryParse numericString styles

    let numericString = "22,593"
    let styles = NumberStyles.Integer ||| NumberStyles.AllowThousands
    callTryParse numericString styles

    let numericString = "12E-01"
    let styles = NumberStyles.Integer ||| NumberStyles.AllowExponent
    callTryParse numericString styles

    let numericString = "12E03"
    callTryParse numericString styles

    let numericString = "80c1"
    callTryParse numericString NumberStyles.HexNumber

    let numericString = "0x80C1"
    callTryParse numericString NumberStyles.HexNumber

    0

// The example displays the following output to the console:
//       Converted '106779' to 106779.
//       Attempted conversion of '-30677' failed.
//       Converted '-30677' to -30677.
//       Attempted conversion of '301677-' failed.
//       Converted '301677-' to -301677.
//       Attempted conversion of '$10634' failed.
//       Converted '$10634' to 10634.
//       Converted '10345.00' to 10345.
//       Attempted conversion of '10345.72' failed.
//       Converted '22,593' to 22593.
//       Attempted conversion of '12E-01' failed.
//       Converted '12E03' to 12000.
//       Converted '80c1' to 32961.
//       Attempted conversion of '0x80C1' failed.
Imports System.Globalization

Module StringParsing
   Public Sub Main()
      Dim numericString As String
      Dim styles As NumberStyles
      
      numericString = "106779"
      styles = NumberStyles.Integer
      CallTryParse(numericString, styles)
      
      numericString = "-30677"
      styles = NumberStyles.None
      CallTryParse(numericString, styles)
      
      styles = NumberStyles.AllowLeadingSign
      CallTryParse(numericString, styles)
      
      numericString = "301677-"
      CallTryParse(numericString, styles)
      
      styles = styles Or NumberStyles.AllowTrailingSign
      CallTryParse(numericString, styles)
      
      numericString = "$10634"
      styles = NumberStyles.Integer
      CallTryParse(numericString, styles)
      
      styles = NumberStyles.Integer Or NumberStyles.AllowCurrencySymbol
      CallTryParse(numericString, styles)

      numericString = "10345.00"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)
      
      numericString = "10345.72"
      styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
      CallTryParse(numericString, styles)

      numericString = "22,593" 
      styles = NumberStyles.Integer Or NumberStyles.AllowThousands
      CallTryParse(numericString, styles)
      
      numericString = "12E-01"
      styles = NumberStyles.Integer Or NumberStyles.AllowExponent
      CallTryParse(numericString, styles) 
          
      numericString = "12E03"
      CallTryParse(numericString, styles) 
      
      numericString = "80c1"
      CallTryParse(numericString, NumberStyles.HexNumber)
      
      numericString = "0x80C1"
      CallTryParse(numericString, NumberStyles.HexNumber)
   End Sub
   
   Private Sub CallTryParse(stringToConvert As String, styles AS NumberStyles)
      Dim number As Integer
      Dim provider As CultureInfo
      
      ' If currency symbol is allowed, use en-US culture.
      If CBool(styles And NumberStyles.AllowCurrencySymbol) Then
         provider = CultureInfo.CurrentCulture
      Else
         provider = New CultureInfo("en-US")
      End If
      
      Dim result As Boolean = Int32.TryParse(stringToConvert, styles, _
                                             provider, number)
      If result Then
         Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number)
      Else
         Console.WriteLine("Attempted conversion of '{0}' failed.", _
                           Convert.ToString(stringToConvert))
      End If                                                                           
   End Sub
End Module
' The example displays the following output to the console:
'       Converted '106779' to 106779.
'       Attempted conversion of '-30677' failed.
'       Converted '-30677' to -30677.
'       Attempted conversion of '301677-' failed.
'       Converted '301677-' to -301677.
'       Attempted conversion of '$10634' failed.
'       Converted '$10634' to 10634.
'       Converted '10345.00' to 10345.
'       Attempted conversion of '10345.72' failed.
'       Converted '22,593' to 22593.
'       Attempted conversion of '12E-01' failed.
'       Converted '12E03' to 12000.
'       Converted '80c1' to 32961.
'       Attempted conversion of '0x80C1' failed.

Comentarios

El método TryParse es similar al método Parse, salvo que el método TryParse no produce una excepción si se produce un error en la conversión. Elimina la necesidad de usar el control de excepciones para probar un FormatException en caso de que s no sea válido y no se pueda analizar correctamente.

El parámetro style define los elementos de estilo (como espacios en blanco o un signo positivo o negativo) que se permiten en el parámetro s para que la operación de análisis se realice correctamente. Debe ser una combinación de marcas de bits de la enumeración NumberStyles. Según el valor de style, el parámetro s puede incluir los siguientes elementos:

[ws] [$] [sign] [digits,]digits[.fractional_digits][e[sign]digits][ws]

O bien, si el parámetro style incluye AllowHexSpecifier:

[ws]hexdigits[ws]

Los elementos entre corchetes ([ y ]) son opcionales. En la tabla siguiente se describe cada elemento.

Elemento Descripción
ws Espacio en blanco opcional. El espacio en blanco puede aparecer al principio de s si style incluye la marca NumberStyles.AllowLeadingWhite o al final de s si style incluye la marca de NumberStyles.AllowTrailingWhite.
$ Símbolo de moneda específico de la referencia cultural. Su posición en la cadena se define mediante la propiedad CurrencyPositivePattern del objeto NumberFormatInfo devuelto por el método GetFormat del parámetro provider. El símbolo de moneda puede aparecer en s si style incluye la marca NumberStyles.AllowCurrencySymbol.
de signo Un signo opcional. Un símbolo de signo puede aparecer en s si style incluye las marcas NumberStyles.AllowLeadingSign o NumberStyles.AllowTrailingSign.
de dígitos de Secuencia de dígitos de 0 a 9.
, Separador de miles específicos de la referencia cultural. El separador de miles de la referencia cultural especificada por provider puede aparecer en s si style incluye la marca NumberStyles.AllowThousands.
. Símbolo de separador decimal específico de la referencia cultural. El símbolo decimal de la referencia cultural especificada por provider puede aparecer en s si style incluye la marca NumberStyles.AllowDecimalPoint.
fractional_digits Una o varias apariciones del dígito 0. Los dígitos fraccionarios solo pueden aparecer en s si style incluye la marca NumberStyles.AllowDecimalPoint.
e El carácter "e" o "E", que indica que el valor se representa en notación exponencial. El parámetro s puede representar un número en notación exponencial si style incluye la marca NumberStyles.AllowExponent.
hexadecimas Secuencia de dígitos hexadecimales de 0 a f o 0 a F.

Nota

La operación de análisis omite los caracteres NUL (U+0000) de s, independientemente del valor del argumento style.

Una cadena con dígitos decimales solo (que corresponde a la marca de NumberStyles.None) siempre analiza correctamente. La mayoría de los miembros de NumberStyles restantes controlan los elementos de control que pueden estar presentes, pero no deben estar presentes en esta cadena de entrada. En la tabla siguiente se indica cómo afectan los miembros de NumberStyles individuales a los elementos que pueden estar presentes en s.

Valores de NumberStyles no compuestos Elementos permitidos en s además de dígitos
NumberStyles.None Solo dígitos decimales.
NumberStyles.AllowDecimalPoint El separador decimal (.) y los elementos fractional_digits. Sin embargo, fractional_digits debe constar de solo uno o más 0 dígitos o el método devuelve false.
NumberStyles.AllowExponent El parámetro s también puede usar la notación exponencial. Si s representa un número en notación exponencial, debe representar un entero dentro del intervalo del tipo de datos Int32 sin un componente fraccionario distinto de cero.
NumberStyles.AllowLeadingWhite Elemento ws al principio de s.
NumberStyles.AllowTrailingWhite Elemento ws al final de s.
NumberStyles.AllowLeadingSign Un signo puede aparecer antes de dígitos.
NumberStyles.AllowTrailingSign Un signo puede aparecer después de dígitos.
NumberStyles.AllowParentheses El signo elemento en forma de paréntesis que incluye el valor numérico.
NumberStyles.AllowThousands Elemento separador de miles (,).
NumberStyles.AllowCurrencySymbol Elemento $.
NumberStyles.Currency Todos los elementos. El parámetro s no puede representar un número hexadecimal o un número en notación exponencial.
NumberStyles.Float Elemento ws al principio o al final de s, signo al principio de sy el símbolo decimal (.). El parámetro s también puede usar la notación exponencial.
NumberStyles.Number Los ws, signo, separador de miles (,) y decimales (.).
NumberStyles.Any Todos los estilos, excepto s no pueden representar un número hexadecimal.

Si se usa la marca NumberStyles.AllowHexSpecifier, s debe ser un valor hexadecimal sin prefijo. Por ejemplo, "C9AF3" analiza correctamente, pero "0xC9AF3" no. Las únicas marcas que pueden estar presentes en style son NumberStyles.AllowLeadingWhite y NumberStyles.AllowTrailingWhite. (La enumeración NumberStyles tiene un estilo compuesto, NumberStyles.HexNumber, que incluye ambas marcas de espacio en blanco).

El parámetro provider es una implementación de IFormatProvider, como un objeto CultureInfo o un objeto NumberFormatInfo, cuyo método GetFormat devuelve un objeto NumberFormatInfo. El objeto NumberFormatInfo proporciona información específica de la referencia cultural sobre el formato de s. Si provider es null, se usa el objeto NumberFormatInfo para la referencia cultural actual.

Consulte también

Se aplica a