Udostępnij za pośrednictwem


Int64.TryParse Metoda

Definicja

Konwertuje reprezentację ciągu liczby na 64-bitową liczbę całkowitą ze znakiem. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

Przeciążenia

TryParse(String, IFormatProvider, Int64)

Próbuje przeanalizować ciąg w wartości.

TryParse(ReadOnlySpan<Char>, Int64)

Konwertuje reprezentację zakresu liczby na 64-bitową liczbę całkowitą ze znakiem. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

TryParse(String, Int64)

Konwertuje reprezentację ciągu liczby na 64-bitową liczbę całkowitą ze znakiem. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

TryParse(ReadOnlySpan<Byte>, IFormatProvider, Int64)

Próbuje przeanalizować zakres znaków UTF-8 w wartość.

TryParse(ReadOnlySpan<Char>, IFormatProvider, Int64)

Próbuje przeanalizować zakres znaków w wartości.

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

Próbuje przeanalizować zakres znaków UTF-8 w wartość.

TryParse(ReadOnlySpan<Byte>, Int64)

Próbuje przekonwertować zakres znaków UTF-8 zawierający reprezentację ciągu liczby na 64-bitową liczbę całkowitą ze znakiem.

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

Konwertuje reprezentację zakresu liczby w określonym stylu i formacie specyficznym dla kultury na 64-bitową liczbę całkowitą ze znakiem. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

TryParse(String, NumberStyles, IFormatProvider, Int64)

Konwertuje reprezentację ciągu liczby w określonym stylu i formacie specyficznym dla kultury na 64-bitową liczbę całkowitą ze znakiem. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

TryParse(String, IFormatProvider, Int64)

Źródło:
Int64.cs
Źródło:
Int64.cs
Źródło:
Int64.cs

Próbuje przeanalizować ciąg w wartości.

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

Parametry

s
String

Ciąg do analizy.

provider
IFormatProvider

Obiekt, który udostępnia informacje o formatowaniu specyficznym dla kultury na temat s.

result
Int64

Gdy ta metoda zwraca, zawiera wynik pomyślnego analizowania s lub niezdefiniowanej wartości w przypadku błędu.

Zwraca

true, jeśli s została pomyślnie przeanalizowana; w przeciwnym razie false.

Dotyczy

TryParse(ReadOnlySpan<Char>, Int64)

Źródło:
Int64.cs
Źródło:
Int64.cs
Źródło:
Int64.cs

Konwertuje reprezentację zakresu liczby na 64-bitową liczbę całkowitą ze znakiem. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

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

Parametry

s
ReadOnlySpan<Char>

Zakres zawierający znaki reprezentujące liczbę do przekonwertowania.

result
Int64

Gdy ta metoda zwraca wartość całkowitą ze znakiem 64-bitowym, odpowiada liczbie zawartej w s, jeśli konwersja zakończyła się pomyślnie lub zero, jeśli konwersja nie powiodła się. Konwersja kończy się niepowodzeniem, jeśli parametr s jest null lub Empty, nie jest poprawnym formatem lub reprezentuje liczbę mniejszą niż Int64.MinValue lub większą niż Int64.MaxValue. Ten parametr jest przekazywany niezainicjowany; każda wartość pierwotnie podana w result zostanie zastąpiona.

Zwraca

true, jeśli s została pomyślnie przekonwertowana; w przeciwnym razie false.

Dotyczy

TryParse(String, Int64)

Źródło:
Int64.cs
Źródło:
Int64.cs
Źródło:
Int64.cs

Konwertuje reprezentację ciągu liczby na 64-bitową liczbę całkowitą ze znakiem. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

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

Parametry

s
String

Ciąg zawierający liczbę do przekonwertowania.

result
Int64

Gdy ta metoda zwraca wartość całkowitą ze znakiem 64-bitowym, odpowiada liczbie zawartej w s, jeśli konwersja zakończyła się pomyślnie lub zero, jeśli konwersja nie powiodła się. Konwersja kończy się niepowodzeniem, jeśli parametr s jest null lub Empty, nie jest poprawnym formatem lub reprezentuje liczbę mniejszą niż Int64.MinValue lub większą niż Int64.MaxValue. Ten parametr jest przekazywany niezainicjowany; każda wartość pierwotnie podana w result zostanie zastąpiona.

Zwraca

true, jeśli s została pomyślnie przekonwertowana; w przeciwnym razie false.

Przykłady

Poniższy przykład wywołuje metodę Int64.TryParse(String, Int64) z wieloma różnymi wartościami ciągu.

using System;

public class StringParsing
{
   public static void Main()
   {
      TryToParse(null);
      TryToParse("160519");
      TryToParse("9432.0");
      TryToParse("16,667");
      TryToParse("   -322   ");
      TryToParse("+4302");
      TryToParse("(100);");
      TryToParse("01FA");
   }

   private static void TryToParse(string value)
   {
      bool success = Int64.TryParse(value, out long number);
      if (success)
      {
         Console.WriteLine("Converted '{0}' to {1}.", value, number);
      }
      else
      {
         if (value == null) value = "";
         Console.WriteLine("Attempted conversion of '{0}' failed.", value);
      }
   }
}
// The example displays the following output to the console:
//       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.
open System

let tryToParse (value: string) =
    match Int64.TryParse value with
    | true, number ->
        printfn $"Converted '{value}' to {number}."
    | _ ->
        let value =
            if isNull value then 
                ""
            else
                value
        printfn $"Attempted conversion of '{value}' failed."

tryToParse null
tryToParse "160519"
tryToParse "9432.0"
tryToParse "16,667"
tryToParse "   -322   "
tryToParse "+4302"
tryToParse "(100);"
tryToParse "01FA"


// The example displays the following output to the console:
//       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.
Module StringParsing
   Public Sub Main()
      TryToParse(Nothing)
      TryToParse("160519")
      TryToParse("9432.0")
      TryToParse("16,667")
      TryToParse("   -322   ")
      TryToParse("+4302")
      TryToParse("(100)")
      TryToParse("01FA")
   End Sub
   
   Private Sub TryToParse(value As String)
      Dim number As Long
      Dim result As Boolean = Int64.TryParse(value, number)
      If result Then
         Console.WriteLine("Converted '{0}' to {1}.", value, number)
      Else
         If value Is Nothing Then value = "" 
         Console.WriteLine("Attempted conversion of '{0}' failed.", value)
      End If     
   End Sub
End Module
' The example displays the following output to the console:
'       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.

Niektóre ciągi, których metoda TryParse(String, Int64) nie może przekonwertować w tym przykładzie, to:

  • "9432.0". Konwersja kończy się niepowodzeniem, ponieważ ciąg nie może zawierać separatora dziesiętnego; musi zawierać tylko cyfry całkowite.

  • "16,667". Konwersja kończy się niepowodzeniem, ponieważ ciąg nie może zawierać separatorów grup; musi zawierać tylko cyfry całkowite.

  • "(100)". Konwersja kończy się niepowodzeniem, ponieważ ciąg nie może zawierać znaku ujemnego innego niż ten zdefiniowany przez właściwości NumberFormatInfo.NegativeSign bieżącej kultury i NumberFormatInfo.NumberNegativePattern.

  • "01FA". Konwersja kończy się niepowodzeniem, ponieważ ciąg nie może zawierać cyfr szesnastkowych; musi zawierać tylko cyfry dziesiętne.

Uwagi

Metoda TryParse jest podobna do metody Parse, z wyjątkiem metody TryParse nie zgłasza wyjątku, jeśli konwersja nie powiedzie się. Eliminuje to konieczność użycia obsługi wyjątków w celu przetestowania FormatException w przypadku, gdy s jest nieprawidłowa i nie można jej pomyślnie przeanalizować.

Parametr s zawiera liczbę formularzy:

[ws] [znak]cyfry[ws]

Elementy w nawiasach kwadratowych ([ i ]) są opcjonalne. W poniższej tabeli opisano każdy element.

Pierwiastek Opis
ws Opcjonalny biały znak.
podpisywania Opcjonalny znak.
cyfry Sekwencja cyfr od 0 do 9.

Parametr s jest interpretowany przy użyciu stylu NumberStyles.Integer. Oprócz cyfr dziesiętnych dozwolone są tylko spacje wiodące i końcowe wraz z znakiem wiodącym. Aby jawnie zdefiniować elementy stylu wraz z informacjami formatowania specyficznymi dla kultury, które mogą być obecne w s, użyj metody TryParse(String, NumberStyles, IFormatProvider, Int64).

Parametr s jest analizowany przy użyciu informacji formatowania w obiekcie NumberFormatInfo zainicjowanym dla bieżącej kultury systemu. Aby uzyskać więcej informacji, zobacz CurrentInfo.

To przeciążenie metody TryParse interpretuje wszystkie cyfry w parametrze s jako cyfry dziesiętne. Aby przeanalizować reprezentację ciągu liczby szesnastkowej, wywołaj przeciążenie TryParse(String, NumberStyles, IFormatProvider, Int64).

Zobacz też

Dotyczy

TryParse(ReadOnlySpan<Byte>, IFormatProvider, Int64)

Źródło:
Int64.cs
Źródło:
Int64.cs

Próbuje przeanalizować zakres znaków UTF-8 w wartość.

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

Parametry

utf8Text
ReadOnlySpan<Byte>

Zakres znaków UTF-8 do przeanalizowania.

provider
IFormatProvider

Obiekt, który udostępnia informacje o formatowaniu specyficznym dla kultury na temat utf8Text.

result
Int64

Po powrocie zawiera wynik pomyślnego analizowania utf8Text lub niezdefiniowanej wartości w przypadku błędu.

Zwraca

true, jeśli utf8Text została pomyślnie przeanalizowana; w przeciwnym razie false.

Dotyczy

TryParse(ReadOnlySpan<Char>, IFormatProvider, Int64)

Źródło:
Int64.cs
Źródło:
Int64.cs
Źródło:
Int64.cs

Próbuje przeanalizować zakres znaków w wartości.

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

Parametry

s
ReadOnlySpan<Char>

Zakres znaków do przeanalizowania.

provider
IFormatProvider

Obiekt, który udostępnia informacje o formatowaniu specyficznym dla kultury na temat s.

result
Int64

Gdy ta metoda zwraca wartość , zawiera wynik pomyślnego analizowania slub niezdefiniowanej wartości w przypadku błędu.

Zwraca

true, jeśli s została pomyślnie przeanalizowana; w przeciwnym razie false.

Dotyczy

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

Źródło:
Int64.cs
Źródło:
Int64.cs

Próbuje przeanalizować zakres znaków UTF-8 w wartość.

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

Parametry

utf8Text
ReadOnlySpan<Byte>

Zakres znaków UTF-8 do przeanalizowania.

style
NumberStyles

Bitowa kombinacja stylów liczbowych, które mogą być obecne w utf8Text.

provider
IFormatProvider

Obiekt, który udostępnia informacje o formatowaniu specyficznym dla kultury na temat utf8Text.

result
Int64

Po powrocie zawiera wynik pomyślnego analizowania utf8Text lub niezdefiniowanej wartości w przypadku błędu.

Zwraca

true, jeśli utf8Text została pomyślnie przeanalizowana; w przeciwnym razie false.

Dotyczy

TryParse(ReadOnlySpan<Byte>, Int64)

Źródło:
Int64.cs
Źródło:
Int64.cs

Próbuje przekonwertować zakres znaków UTF-8 zawierający reprezentację ciągu liczby na 64-bitową liczbę całkowitą ze znakiem.

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

Parametry

utf8Text
ReadOnlySpan<Byte>

Zakres zawierający znaki UTF-8 reprezentujące liczbę do przekonwertowania.

result
Int64

Gdy ta metoda zwróci wartość całkowitą ze znakiem 64-bitowym, równoważną liczbie zawartej w utf8Text, jeśli konwersja zakończyła się pomyślnie, lub zero, jeśli konwersja nie powiodła się. Ten parametr jest przekazywany niezainicjowany; każda wartość pierwotnie podana w wyniku zostanie zastąpiona.

Zwraca

true, jeśli utf8Text została pomyślnie przekonwertowana; w przeciwnym razie false.

Dotyczy

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

Źródło:
Int64.cs
Źródło:
Int64.cs
Źródło:
Int64.cs

Konwertuje reprezentację zakresu liczby w określonym stylu i formacie specyficznym dla kultury na 64-bitową liczbę całkowitą ze znakiem. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

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

Parametry

s
ReadOnlySpan<Char>

Zakres zawierający znaki reprezentujące liczbę do przekonwertowania. Zakres jest interpretowany przy użyciu stylu określonego przez style.

style
NumberStyles

Bitowa kombinacja wartości wyliczenia wskazująca elementy stylu, które mogą być obecne w s. Typową wartością do określenia jest Integer.

provider
IFormatProvider

Obiekt, który dostarcza informacje o formatowaniu specyficznym dla kultury na temat s.

result
Int64

Gdy ta metoda zwraca wartość całkowitą ze znakiem 64-bitowym, odpowiada liczbie zawartej w s, jeśli konwersja zakończyła się pomyślnie lub zero, jeśli konwersja nie powiodła się. Konwersja kończy się niepowodzeniem, jeśli parametr s jest null lub Empty, nie jest w formacie zgodnym z stylelub reprezentuje liczbę mniejszą niż Int64.MinValue lub większą niż Int64.MaxValue. Ten parametr jest przekazywany niezainicjowany; każda wartość pierwotnie podana w result zostanie zastąpiona.

Zwraca

true, jeśli s została pomyślnie przekonwertowana; w przeciwnym razie false.

Dotyczy

TryParse(String, NumberStyles, IFormatProvider, Int64)

Źródło:
Int64.cs
Źródło:
Int64.cs
Źródło:
Int64.cs

Konwertuje reprezentację ciągu liczby w określonym stylu i formacie specyficznym dla kultury na 64-bitową liczbę całkowitą ze znakiem. Wartość zwracana wskazuje, czy konwersja zakończyła się powodzeniem, czy niepowodzeniem.

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

Parametry

s
String

Ciąg zawierający liczbę do przekonwertowania. Ciąg jest interpretowany przy użyciu stylu określonego przez style.

style
NumberStyles

Bitowa kombinacja wartości wyliczenia wskazująca elementy stylu, które mogą być obecne w s. Typową wartością do określenia jest Integer.

provider
IFormatProvider

Obiekt, który dostarcza informacje o formatowaniu specyficznym dla kultury na temat s.

result
Int64

Gdy ta metoda zwraca wartość całkowitą ze znakiem 64-bitowym, odpowiada liczbie zawartej w s, jeśli konwersja zakończyła się pomyślnie lub zero, jeśli konwersja nie powiodła się. Konwersja kończy się niepowodzeniem, jeśli parametr s jest null lub Empty, nie jest w formacie zgodnym z stylelub reprezentuje liczbę mniejszą niż Int64.MinValue lub większą niż Int64.MaxValue. Ten parametr jest przekazywany niezainicjowany; każda wartość pierwotnie podana w result zostanie zastąpiona.

Zwraca

true, jeśli s została pomyślnie przekonwertowana; w przeciwnym razie false.

Wyjątki

style nie jest wartością NumberStyles.

-lub-

style nie jest kombinacją wartości AllowHexSpecifier i HexNumber.

Przykłady

Poniższy przykład wywołuje metodę TryParse(String, NumberStyles, IFormatProvider, Int64) z kilkoma różnymi ciągami i wartościami NumberStyles.

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 = Int64.TryParse(stringToConvert, styles,
                                   provider, out long 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 Int64.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 Long
      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 = Int64.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.

Uwagi

Metoda TryParse jest podobna do metody Parse, z wyjątkiem metody TryParse nie zgłasza wyjątku, jeśli konwersja nie powiedzie się. Eliminuje to konieczność użycia obsługi wyjątków w celu przetestowania FormatException w przypadku, gdy s jest nieprawidłowa i nie można jej przeanalizować pomyślnie.

Parametr style definiuje elementy stylu (takie jak biały znak lub znak dodatni lub ujemny), które są dozwolone w parametrze s, aby operacja analizy zakończyła się powodzeniem. Musi to być kombinacja flag bitowych z wyliczenia NumberStyles. W zależności od wartości styleparametr s może zawierać następujące elementy:

[ws] [$] [podpis] [cyfry,]cyfry[.fractional_digits][e[znak]exponential_digits][ws]

Lub jeśli parametr style zawiera NumberStyles.AllowHexSpecifier:

[ws]hexdigits[ws]

Elementy w nawiasach kwadratowych ([ i ]) są opcjonalne. W poniższej tabeli opisano każdy element.

Pierwiastek Opis
ws Opcjonalne białe znaki. Białe znaki mogą pojawić się na początku s, jeśli style zawiera flagę NumberStyles.AllowLeadingWhite lub na końcu s, jeśli style zawiera flagę NumberStyles.AllowTrailingWhite.
$ Symbol waluty specyficznej dla kultury. Jego pozycja w ciągu jest definiowana przez właściwość CurrencyPositivePattern obiektu NumberFormatInfo zwróconego przez metodę GetFormat parametru provider. Symbol waluty może pojawić się w s, jeśli style zawiera flagę NumberStyles.AllowCurrencySymbol.
podpisywania Opcjonalny znak. Symbol znaku może pojawić się w s, jeśli style zawiera flagi NumberStyles.AllowLeadingSign lub NumberStyles.AllowTrailingSign.
cyfry

fractional_digits

exponential_digits
Sekwencja cyfr z zakresu od 0 do 9. W przypadku fractional_digitstylko cyfra 0 jest prawidłowa.
, Separator tysięcy specyficzny dla kultury. W s może pojawić się separator tysięcy kultury określonej przez provider, jeśli style zawiera flagę NumberStyles.AllowThousands.
. Symbol separatora dziesiętnego specyficznego dla kultury. Symbol punktu dziesiętnego kultury określonej przez provider może pojawić się w s, jeśli style zawiera flagę NumberStyles.AllowDecimalPoint.
e Znak "e" lub "E", który wskazuje, że wartość jest reprezentowana w notacji wykładniczej. Parametr s może reprezentować liczbę w notacji wykładniczej, jeśli style zawiera flagę NumberStyles.AllowExponent.
szesnastkowy Sekwencja cyfr szesnastkowa od 0 do f lub od 0 do F.

Nuta

Wszystkie znaki NUL (U+0000) w s są ignorowane przez operację analizowania, niezależnie od wartości argumentu style.

Ciąg z cyframi dziesiętnymi (który odpowiada flagi NumberStyles.None) zawsze analizuje się pomyślnie. Większość pozostałych elementów członkowskich NumberStyles, które mogą być, ale nie muszą być obecne w tym ciągu wejściowym. W poniższej tabeli przedstawiono, jak poszczególne elementy członkowskie NumberStyles wpływają na elementy, które mogą znajdować się w s.

Nieskładne wartości NumberStyles Elementy dozwolone w s oprócz cyfr
NumberStyles.None Tylko cyfry dziesiętne.
NumberStyles.AllowDecimalPoint Punkt dziesiętny ( . ) i elementy fractional_digits. Jednak fractional_digits musi składać się tylko z co najmniej jednej cyfry lub metoda zwraca false.
NumberStyles.AllowExponent Parametr s może również używać notacji wykładniczej. Parametr s musi reprezentować liczbę całkowitą w zakresie typu danych Int64 bez składnika ułamkowego innego niż zero.
NumberStyles.AllowLeadingWhite Element ws na początku s.
NumberStyles.AllowTrailingWhite Element ws na końcu s.
NumberStyles.AllowLeadingSign Znak może pojawić się przed cyframi.
NumberStyles.AllowTrailingSign Znak może pojawić się po cyfrach.
NumberStyles.AllowParentheses Znak element w postaci nawiasów otaczających wartość liczbową.
NumberStyles.AllowThousands Separator tysięcy (element , ).
NumberStyles.AllowCurrencySymbol Element $.
NumberStyles.Currency Wszystkie elementy. Parametr s nie może reprezentować liczby szesnastkowej lub liczby w notacji wykładniczej.
NumberStyles.Float Element ws na początku lub na końcu s, znak na początku si symbol dziesiętny ( . ). Parametr s może również używać notacji wykładniczej.
NumberStyles.Number Elementy ws, znaku, tysięcy separatorów (,) i dziesiętnego (.).
NumberStyles.Any Wszystkie style, z wyjątkiem s nie mogą reprezentować liczby szesnastkowej.

Jeśli jest używana flaga NumberStyles.AllowHexSpecifier, s musi być wartością szesnastkową bez prefiksu. Na przykład "C9AF3" analizuje się pomyślnie, ale "0xC9AF3" nie. Jedynymi innymi flagami, które mogą być obecne w style, są NumberStyles.AllowLeadingWhite i NumberStyles.AllowTrailingWhite. (Wyliczenie NumberStyles ma styl złożony, NumberStyles.HexNumber, który zawiera obie flagi odstępu).

Parametr provider jest implementacją IFormatProvider, taką jak obiekt CultureInfo lub obiekt NumberFormatInfo, którego metoda GetFormat zwraca obiekt NumberFormatInfo. Obiekt NumberFormatInfo zawiera informacje specyficzne dla kultury dotyczące formatu s. Jeśli provider jest null, używany jest obiekt NumberFormatInfo dla bieżącej kultury.

Zobacz też

Dotyczy