Поделиться через


BigInteger.TryParse Метод

Определение

Предпринимает попытку преобразования строкового представления числа в его эквивалент типа BigInteger и возвращает значение, позволяющее определить, успешно ли выполнено преобразование.

Перегрузки

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

Предпринимает попытку преобразования строкового представления числа в его эквивалент типа BigInteger и возвращает значение, позволяющее определить, успешно ли выполнено преобразование.

TryParse(String, IFormatProvider, BigInteger)

Пытается проанализировать строку в значение.

TryParse(ReadOnlySpan<Char>, IFormatProvider, BigInteger)

Пытается проанализировать диапазон символов в значение.

TryParse(String, BigInteger)

Предпринимает попытку преобразования строкового представления числа в его эквивалент типа BigInteger и возвращает значение, позволяющее определить, успешно ли выполнено преобразование.

TryParse(ReadOnlySpan<Char>, BigInteger)

Пытается преобразовать представление числа, содержащегося в указанном диапазоне символов только для чтения, в его эквивалент типа BigInteger и возвращает значение, определяющее, успешно ли выполнено преобразование.

TryParse(String, NumberStyles, IFormatProvider, BigInteger)

Предпринимает попытку преобразования числа в формате, который определяется заданным стилем и языком и региональными параметрами, в эквивалент типа BigInteger и возвращает значение, определяющее, успешно ли выполнено преобразование.

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

Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs

Предпринимает попытку преобразования строкового представления числа в его эквивалент типа BigInteger и возвращает значение, позволяющее определить, успешно ли выполнено преобразование.

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

Параметры

value
ReadOnlySpan<Char>

Представление числа в виде диапазона символов, доступного только для чтения.

style
NumberStyles

Побитовое сочетание значений перечисления, обозначающих элементы стиля, которые могут быть представлены в параметре value. Обычно указывается значение Integer.

provider
IFormatProvider

Объект, который предоставляет сведения о форматировании параметра value в зависимости от языка и региональных параметров.

result
BigInteger

После выполнения этого метода содержит эквивалент типа BigInteger числа, содержащегося в параметре value, или Zero, если выполнить преобразование не удалось. Преобразование не удается выполнить, если параметр value является пустым диапазоном символов или имеет формат, несовместимый с style. Этот параметр передается неинициализированным.

Возвращаемое значение

Значение true, если параметр value успешно преобразован; в противном случае — значение false.

Исключения

style не является значением NumberStyles.

-или-

style включает флаги AllowHexSpecifier и HexNumber вместе с другим значениями.

Комментарии

Эта перегрузка похожа на Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider) метод , за исключением того, что она не создает исключение в случае сбоя преобразования. Этот метод избавляет от необходимости использовать обработку исключений, чтобы проверить, является ли value объект недопустимым FormatException и не может быть успешно проанализирован.

Параметр style определяет элементы стиля (например, пробелы или положительный или отрицательный знак), которые разрешены в value параметре для успешного выполнения операции синтаксического анализа. Это должно быть сочетание битовых флагов из перечисления NumberStyles . В зависимости от значения styleпараметр value может включать следующие элементы:

[ws] [$][знак][цифры,]digits[.fractional_digits][E[sign]exponential_digits][ws]

Если параметр style включает AllowHexSpecifier, параметр value может включать следующие элементы:

[ws] hexdigits[ws]

Элементы в квадратных скобках ([и]) являются необязательными. Каждый из элементов описан в таблице ниже.

Элемент Описание
ws Необязательный пробел. Пробел может отображаться в начале value , если style включает NumberStyles.AllowLeadingWhite флаг, или в конце value , если style включает NumberStyles.AllowTrailingWhite флаг.
$ Символ валюты, зависящий от языка и региональных параметров. Его положение в value определяется свойством CurrencyPositivePattern объекта, NumberFormatInfo возвращаемого GetFormat методом provider параметра . Символ валюты может отображаться в , value если style включает NumberStyles.AllowCurrencySymbol флаг .
sign Необязательный знак. Знак может отображаться в начале value , если style включает NumberStyles.AllowLeadingSign флаг, и в конце value , если style включает NumberStyles.AllowTrailingSign флаг. Круглые скобки можно использовать в value , чтобы указать отрицательное значение, если style включает флаг NumberStyles.AllowParentheses .
digits Последовательность цифр от 0 до 9.
, Разделитель групп, зависящий от языка и региональных параметров. Разделитель групп для языка и региональных параметров, заданных параметром , provider может отображаться в value , если style включает флаг NumberStyles.AllowThousands .
. Символ десятичной запятой для конкретного языка и региональных параметров. Символ десятичной запятой языка и региональных параметров, заданных параметром provider , может отображаться в value , если style включает флаг NumberStyles.AllowDecimalPoint .
fractional_digits Одно или несколько вхождений цифры 0. Дробные цифры могут отображаться в value , только если style включает NumberStyles.AllowDecimalPoint флаг .
E Символ "e" или "E", который указывает, что значение представлено в экспоненциальной (научной) нотации. Параметр value может представлять число в экспоненциальной нотации, если style включает флаг NumberStyles.AllowExponent .
exponential_digits Последовательность цифр от 0 до 9. Параметр value может представлять число в экспоненциальной нотации, если style включает флаг NumberStyles.AllowExponent .
hexdigits Последовательность шестнадцатеричных цифр от 0 до f или от 0 до F.

Примечание

Все завершающие символы NUL (U+0000) в s игнорируются операцией синтаксического анализа независимо от значения аргумента style .

Не составные NumberStyles значения Элементы, разрешенные в значении в дополнение к цифрам
None Только десятичные цифры.
AllowDecimalPoint Элементы запятой (.) и fractional_digits . Однако fractional_digits должен состоять только из одной или нескольких цифр 0, иначе метод возвращает false.
AllowExponent Символ "e" или "E", обозначающий экспоненциальную нотацию, а также exponential_digits. Если value представляет число в экспоненциальной нотации, оно не может иметь ненулевой дробный компонент.
AllowLeadingWhite Элемент ws в начале value.
AllowTrailingWhite Элемент ws в конце value.
AllowLeadingSign Элемент знака перед цифрами.
AllowTrailingSign Элемент знака после цифр.
AllowParentheses Элемент sign в виде круглых скобок, включающих числовое значение.
AllowThousands Элемент разделителя групп (,).
AllowCurrencySymbol Элемент currency ($).
Currency Все элементы. value Однако не может представлять шестнадцатеричное число или число в экспоненциальной нотации.
Float Элемент ws в начале или конце value, знак в начале valueи символ десятичной запятой (.). Параметр value также может использовать экспоненциальную нотацию.
Number Элементы ws, знак, разделитель групп (,) и десятичная запятая (.).
Any Все элементы. value Однако не может представлять шестнадцатеричное число.

NumberStyles.AllowHexSpecifier Если используется флаг, value должно быть шестнадцатеричным значением. Единственными флагами, которые могут присутствовать в style , являются NumberStyles.AllowLeadingWhite и NumberStyles.AllowTrailingWhite. (Перечисление NumberStyles имеет составной стиль HexNumber, который включает оба флага пробелов.)

Параметр provider является реализацией IFormatProvider . Его GetFormat метод возвращает объект , предоставляющий NumberFormatInfo сведения о формате value, зависящее от языка и региональных параметров. Параметр provider может быть любым из следующих:

  • Объект CultureInfo , представляющий язык и региональные параметры, предоставляющие сведения о форматировании. Его GetFormat метод возвращает NumberFormatInfo объект , предоставляющий числовые сведения о форматировании для этого языка и региональных параметров.

  • Объект NumberFormatInfo , предоставляющий числовые сведения о форматировании. (Его реализация GetFormat просто возвращает себя.)

  • Пользовательский объект, реализующий IFormatProvider. Его GetFormat метод создает экземпляр и возвращает NumberFormatInfo объект , предоставляющий сведения о форматировании.

Если provider имеет значение null, NumberFormatInfo используется объект для текущего языка и региональных параметров.

См. также раздел

Применяется к

TryParse(String, IFormatProvider, BigInteger)

Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs

Пытается проанализировать строку в значение.

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

Параметры

s
String

Строка для анализа.

provider
IFormatProvider

Объект, предоставляющий сведения о форматировании параметра s в зависимости от языка и региональных параметров.

result
BigInteger

При возврате этого метода содержит результат успешного анализа s или неопределенное значение при сбое.

Возвращаемое значение

true Значение , если s анализ выполнен успешно; в противном случае — значение false.

Применяется к

TryParse(ReadOnlySpan<Char>, IFormatProvider, BigInteger)

Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs

Пытается проанализировать диапазон символов в значение.

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

Параметры

s
ReadOnlySpan<Char>

Диапазон символов для анализа.

provider
IFormatProvider

Объект, предоставляющий сведения о форматировании параметра s в зависимости от языка и региональных параметров.

result
BigInteger

При возврате этим методом содержит результат успешного анализа sили неопределенное значение при сбое.

Возвращаемое значение

true Значение , если s анализ выполнен успешно; в противном случае — значение false.

Применяется к

TryParse(String, BigInteger)

Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs

Предпринимает попытку преобразования строкового представления числа в его эквивалент типа BigInteger и возвращает значение, позволяющее определить, успешно ли выполнено преобразование.

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

Параметры

value
String

Строковое представление числа.

result
BigInteger

После выполнения этого метода содержит эквивалент типа BigInteger числа, содержащегося в параметре value, или нуль (0), если выполнить преобразование не удалось. Преобразование не удается выполнить, если значение параметра value равно null или задано в неверном формате, Этот параметр передается неинициализированным.

Возвращаемое значение

Значение true, если параметр value успешно преобразован; в противном случае — значение false.

Исключения

value имеет значение null.

Примеры

В следующем примере метод используется TryParse(String, BigInteger) для создания экземпляров двух BigInteger объектов . Если преобразования выполнены успешно, каждый объект умножается на другое Compare число, а затем вызывается метод для определения связи между двумя объектами.

BigInteger number1, number2;
bool succeeded1 = BigInteger.TryParse("-12347534159895123", out number1);
bool succeeded2 = BigInteger.TryParse("987654321357159852", out number2);
if (succeeded1 && succeeded2)
{
   number1 *= 3;
   number2 *= 2;
   switch (BigInteger.Compare(number1, number2))
   {
      case -1:
         Console.WriteLine("{0} is greater than {1}.", number2, number1);
         break;
      case 0:
         Console.WriteLine("{0} is equal to {1}.", number1, number2);
         break;
      case 1:
         Console.WriteLine("{0} is greater than {1}.", number1, number2);
         break;
   }
}
else
{
   if (!succeeded1)
      Console.WriteLine("Unable to initialize the first BigInteger value.");

   if (!succeeded2)
      Console.WriteLine("Unable to initialize the second BigInteger value.");
}
// The example displays the following output:
//      1975308642714319704 is greater than -37042602479685369.
    let mutable number1 = BigInteger.Zero
    let mutable number2 = BigInteger.Zero

    let succeeded1 = BigInteger.TryParse("-12347534159895123", &number1)
    let succeeded2 = BigInteger.TryParse("987654321357159852", &number2)

    if succeeded1 && succeeded2 then
        number1 <- number1 * 3I
        number2 <- number2 * 2I

        match BigInteger.Compare(number1, number2) with
        | -1 -> printfn $"{number2} is greater than {number2}."
        | 0 -> printfn $"{number1} is equal to {number2}."
        | 1
        | _ -> printfn $"{number1} is greater than {number2}."
    else
        if not succeeded1 then
            printfn "Unable to initialize the first BigInteger value."

        if not succeeded2 then
            printfn "Unable to initialize the second BigInteger value."

// The example displays the following output:
//      1975308642714319704 is greater than -37042602479685369.
Dim number1 As BigInteger = BigInteger.Zero
Dim number2 As BigInteger = BigInteger.Zero
Dim succeeded1 As Boolean = BigInteger.TryParse("-12347534159895123", number1)
Dim succeeded2 As Boolean = BigInteger.TryParse("987654321357159852", number2)
If succeeded1 AndAlso succeeded2
   number1 *= 3
   number2 *= 2
   Select Case BigInteger.Compare(number1, number2)
      Case -1
         Console.WriteLine("{0} is greater than {1}.", number2, number1)
      Case 0
         Console.WriteLine("{0} is equal to {1}.", number1, number2)
      Case 1
         Console.WriteLine("{0} is greater than {1}.", number1, number2)
   End Select      
Else
   If Not succeeded1 Then 
      Console.WriteLine("Unable to initialize the first BigInteger value.")
   End If
   If Not succeeded2 Then
      Console.WriteLine("Unable to initialize the second BigInteger value.")
   
   End If
End If
' The example displays the following output:
'      1975308642714319704 is greater than -37042602479685369.

Комментарии

Метод TryParse(String, BigInteger) похож на Parse(String) метод , за исключением того, что он не создает исключение в случае сбоя преобразования. Этот метод избавляет от необходимости использовать обработку исключений, чтобы проверить, является ли value объект недопустимым FormatException и не может быть успешно проанализирован.

Параметр value должен быть строковым представлением десятичного числа в следующей форме:

[ws] [знак] digits[ws]

Элементы в квадратных скобках ([и]) являются необязательными. Каждый из элементов описан в таблице ниже.

Элемент Описание
ws Необязательный пробел.
sign Необязательный знак. Допустимые знаки определяются NumberFormatInfo.NegativeSign свойствами и текущего языка и NumberFormatInfo.PositiveSign региональных параметров.
digits Последовательность десятичных цифр в диапазоне от 0 до 9.

Примечание

Строка, указанная параметром value , не может содержать разделители групп или десятичный разделитель, а также не может содержать десятичную часть.

Параметр value интерпретируется с помощью NumberStyles.Integer стиля . Помимо десятичных разрядов, допускаются только начальные и конечные пробелы со знаком "в начале". Чтобы явно определить элементы стиля с помощью сведений о форматировании, относящихся к языку и региональным параметрам, которые могут присутствовать в value, вызовите TryParse(String, NumberStyles, IFormatProvider, BigInteger) метод .

Параметр value анализируется с помощью сведений о форматировании в объекте NumberFormatInfo для текущего языка и региональных параметров. Для получения дополнительной информации см. NumberFormatInfo.CurrentInfo.

Эта перегрузка интерпретирует все цифры в параметре value как десятичные. Чтобы проанализировать строковое представление шестнадцатеричного числа, вызовите вместо этого перегрузку TryParse(String, NumberStyles, IFormatProvider, BigInteger) .

См. также раздел

Применяется к

TryParse(ReadOnlySpan<Char>, BigInteger)

Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs

Пытается преобразовать представление числа, содержащегося в указанном диапазоне символов только для чтения, в его эквивалент типа BigInteger и возвращает значение, определяющее, успешно ли выполнено преобразование.

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

Параметры

value
ReadOnlySpan<Char>

Представление числа в виде диапазона символов, доступного только для чтения.

result
BigInteger

После выполнения этого метода содержит эквивалент типа BigInteger числа, содержащегося в параметре value, или нуль (0), если выполнить преобразование не удалось. Преобразование не удается выполнить, если параметр value равен пустому диапазону символов или задан в неверном формате. Этот параметр передается неинициализированным.

Возвращаемое значение

Значение true, если параметр value успешно преобразован; в противном случае — значение false.

См. также раздел

Применяется к

TryParse(String, NumberStyles, IFormatProvider, BigInteger)

Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs

Предпринимает попытку преобразования числа в формате, который определяется заданным стилем и языком и региональными параметрами, в эквивалент типа BigInteger и возвращает значение, определяющее, успешно ли выполнено преобразование.

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

Параметры

value
String

Строковое представление числа. Строка интерпретируется с использованием стиля, указанного в style.

style
NumberStyles

Побитовое сочетание значений перечисления, обозначающих элементы стиля, которые могут быть представлены в параметре value. Обычно указывается значение Integer.

provider
IFormatProvider

Объект, который предоставляет сведения о форматировании параметра value в зависимости от языка и региональных параметров.

result
BigInteger

После выполнения этого метода содержит эквивалент типа BigInteger числа, содержащегося в параметре value, или Zero, если выполнить преобразование не удалось. Преобразование не удается выполнить, если параметр value имеет значение null или имеет формат, несовместимый со значением style, Этот параметр передается неинициализированным.

Возвращаемое значение

Значение true, если параметр value успешно преобразован; в противном случае — значение false.

Исключения

style не является значением NumberStyles.

-или-

style включает флаги AllowHexSpecifier и HexNumber вместе с другим значениями.

Примеры

В следующем примере выполняются некоторые TryParse(String, NumberStyles, IFormatProvider, BigInteger) вызовы метода с использованием различных сочетаний значений для style параметров и provider .

string numericString;
BigInteger number = BigInteger.Zero;

// Call TryParse with default values of style and provider.
numericString = "  -300   ";
if (BigInteger.TryParse(numericString, NumberStyles.Integer,
                       null, out number))
   Console.WriteLine("'{0}' was converted to {1}.",
                     numericString, number);
else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString);

// Call TryParse with the default value of style and
// a provider supporting the tilde as negative sign.
numericString = "  -300   ";
if (BigInteger.TryParse(numericString, NumberStyles.Integer,
                       new BigIntegerFormatProvider(), out number))
   Console.WriteLine("'{0}' was converted to {1}.",
                     numericString, number);
else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString);

// Call TryParse with only AllowLeadingWhite and AllowTrailingWhite.
// Method returns false because of presence of negative sign.
numericString = "  -500   ";
if (BigInteger.TryParse(numericString,
                        NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite,
                        new BigIntegerFormatProvider(), out number))
   Console.WriteLine("'{0}' was converted to {1}.",
                     numericString, number);
else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString);

// Call TryParse with AllowHexSpecifier and a hex value.
numericString = "F14237FFAAC086455192";
if (BigInteger.TryParse(numericString,
                        NumberStyles.AllowHexSpecifier,
                        null, out number))
   Console.WriteLine("'{0}' was converted to {1} (0x{1:x}).",
                     numericString, number);
else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString);

// Call TryParse with AllowHexSpecifier and a negative hex value.
// Conversion fails because of presence of negative sign.
numericString = "-3af";
if (BigInteger.TryParse(numericString, NumberStyles.AllowHexSpecifier,
                       new BigIntegerFormatProvider(), out number))
   Console.WriteLine("'{0}' was converted to {1}.",
                     numericString, number);
else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString);

// Call TryParse with only NumberStyles.None.
// Conversion fails because of presence of white space and sign.
numericString = " -300 ";
if (BigInteger.TryParse(numericString, NumberStyles.None,
                       new BigIntegerFormatProvider(), out number))
   Console.WriteLine("'{0}' was converted to {1}.",
                     numericString, number);
else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString);

// Call TryParse with NumberStyles.Any and a provider for the fr-FR culture.
// Conversion fails because the string is formatted for the en-US culture.
numericString = "9,031,425,666,123,546.00";
if (BigInteger.TryParse(numericString, NumberStyles.Any,
                       new CultureInfo("fr-FR"), out number))
   Console.WriteLine("'{0}' was converted to {1}.",
                     numericString, number);
else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString);

// Call TryParse with NumberStyles.Any and a provider for the fr-FR culture.
// Conversion succeeds because the string is properly formatted
// For the fr-FR culture.
numericString = "9 031 425 666 123 546,00";
if (BigInteger.TryParse(numericString, NumberStyles.Any,
                       new CultureInfo("fr-FR"), out number))
   Console.WriteLine("'{0}' was converted to {1}.",
                     numericString, number);
else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString);
// The example displays the following output:
//    '  -300   ' was converted to -300.
//    Conversion of '  -300   ' to a BigInteger failed.
//    Conversion of '  -500   ' to a BigInteger failed.
//    'F14237FFAAC086455192' was converted to -69613977002644837412462 (0xf14237ffaac086455192).
//    Conversion of '-3af' to a BigInteger failed.
//    Conversion of ' -300 ' to a BigInteger failed.
//    Conversion of '9,031,425,666,123,546.00' to a BigInteger failed.
//    '9 031 425 666 123 546,00' was converted to 9031425666123546.
    // Call TryParse with default values of style and provider.
    let numericString = "  -300   "

    match BigInteger.TryParse(numericString, NumberStyles.Integer, null) with
    | true, number -> printfn $"The string '{numericString}' parses to {number}"
    | _ -> printfn $"Conversion of {numericString} to a BigInteger failed."

    // Call TryParse with the default value of style and
    // a provider supporting the tilde as negative sign.
    let numericString = "  -300   "

    match BigInteger.TryParse(numericString, NumberStyles.Integer, new BigIntegerFormatProvider()) with
    | true, number -> printfn $"The string '{numericString}' parses to {number}"
    | _ -> printfn $"Conversion of {numericString} to a BigInteger failed."

    // Call TryParse with only AllowLeadingWhite and AllowTrailingWhite.
    // Method returns false because of presence of negative sign.
    let numericString = "  -500   "

    match
        BigInteger.TryParse(
            numericString,
            NumberStyles.AllowLeadingWhite ||| NumberStyles.AllowTrailingWhite,
            new BigIntegerFormatProvider()
        )
    with
    | true, number -> printfn $"The string '{numericString}' parses to {number}"
    | _ -> printfn $"Conversion of {numericString} to a BigInteger failed."

    // Call TryParse with AllowHexSpecifier and a hex value.
    let numericString = "F14237FFAAC086455192"

    match BigInteger.TryParse(numericString, NumberStyles.AllowHexSpecifier, null) with
    | true, number -> printfn $"The string '{numericString}' parses to {number}, or 0x{number:x}."
    | _ -> printfn $"Conversion of {numericString} to a BigInteger failed."

    // Call TryParse with AllowHexSpecifier and a negative hex value.
    // Conversion fails because of presence of negative sign.
    let numericString = "-3af"

    match BigInteger.TryParse(numericString, NumberStyles.AllowHexSpecifier, null) with
    | true, number -> printfn $"The string '{numericString}' parses to {number}, or 0x{number:x}."
    | _ -> printfn $"Conversion of {numericString} to a BigInteger failed."

    // Call TryParse with only NumberStyles.None.
    // Conversion fails because of presence of white space and sign.
    let numericString = " -300 "

    match BigInteger.TryParse(numericString, NumberStyles.None, new BigIntegerFormatProvider()) with
    | true, number -> printfn $"The string '{numericString}' parses to {number}"
    | _ -> printfn $"Conversion of {numericString} to a BigInteger failed."

    // Call TryParse with NumberStyles.Any and a provider for the fr-FR culture.
    // Conversion fails because the string is formatted for the en-US culture.
    let numericString = "9,031,425,666,123,546.00"

    match BigInteger.TryParse(numericString, NumberStyles.Any, new CultureInfo("fr-FR")) with
    | true, number -> printfn $"The string '{numericString}' parses to {number}"
    | _ -> printfn $"Conversion of {numericString} to a BigInteger failed."

    // Call TryParse with NumberStyles.Any and a provider for the fr-FR culture.
    // Conversion succeeds because the string is properly formatted
    // For the fr-FR culture.
    let numericString = "9 031 425 666 123 546,00"

    match BigInteger.TryParse(numericString, NumberStyles.Any, new CultureInfo("fr-FR")) with
    | true, number -> printfn $"The string '{numericString}' parses to {number}"
    | _ -> printfn $"Conversion of {numericString} to a BigInteger failed."

// The example displays the following output:
//    '  -300   ' was converted to -300.
//    Conversion of '  -300   ' to a BigInteger failed.
//    Conversion of '  -500   ' to a BigInteger failed.
//    'F14237FFAAC086455192' was converted to -69613977002644837412462 (0xf14237ffaac086455192).
//    Conversion of '-3af' to a BigInteger failed.
//    Conversion of ' -300 ' to a BigInteger failed.
//    Conversion of '9,031,425,666,123,546.00' to a BigInteger failed.
//    '9 031 425 666 123 546,00' was converted to 9031425666123546.
Dim numericString As String
Dim number As BigInteger = BigInteger.Zero

' Call TryParse with default values of style and provider.
numericString = "  -300   "
If BigInteger.TryParse(numericString, NumberStyles.Integer,
                       Nothing, number) Then
   Console.WriteLine("'{0}' was converted to {1}.",
                     numericString, number)                             
Else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString)
End If                                             

' Call TryParse with the default value of style and 
' a provider supporting the tilde as negative sign.
numericString = "  -300   "
If BigInteger.TryParse(numericString, NumberStyles.Integer,
                       New BigIntegerFormatProvider(), number) Then
   Console.WriteLine("'{0}' was converted to {1}.",
                     numericString, number)                             
Else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString)
End If                                             

' Call TryParse with only AllowLeadingWhite and AllowTrailingWhite.
' Method returns false because of presence of negative sign.
numericString = "  -500   "
If BigInteger.TryParse(numericString,
                    NumberStyles.AllowLeadingWhite Or NumberStyles.AllowTrailingWhite,
                    New BigIntegerFormatProvider(), number) Then
   Console.WriteLine("'{0}' was converted to {1}.",
                     numericString, number)                             
Else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString)
End If                                             

' Call TryParse with AllowHexSpecifier and a hex value.
numericString = "F14237FFAAC086455192"
If BigInteger.TryParse(numericString,
                    NumberStyles.AllowHexSpecifier,
                    Nothing, number) Then
   Console.WriteLine("'{0}' was converted to {1} (0x{1:x}).",
                     numericString, number)                             
Else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString)
End If                                             

' Call TryParse with AllowHexSpecifier and a negative hex value.
' Conversion fails because of presence of negative sign.
numericString = "-3af"
If BigInteger.TryParse(numericString, NumberStyles.AllowHexSpecifier,
                       New BigIntegerFormatProvider(), number) Then
   Console.WriteLine("'{0}' was converted to {1}.",
                     numericString, number)                             
Else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString)
End If                                             

' Call TryParse with only NumberStyles.None.
' Conversion fails because of presence of white space and sign.
numericString = " -300 "
If BigInteger.TryParse(numericString, NumberStyles.None,
                       New BigIntegerFormatProvider(), number) Then
   Console.WriteLine("'{0}' was converted to {1}.",
                     numericString, number)                             
Else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString)
End If 
                                            
' Call TryParse with NumberStyles.Any and a provider for the fr-FR culture.
' Conversion fails because the string is formatted for the en-US culture.
numericString = "9,031,425,666,123,546.00"
If BigInteger.TryParse(numericString, NumberStyles.Any,
                       New CultureInfo("fr-FR"), number) Then
   Console.WriteLine("'{0}' was converted to {1}.",
                     numericString, number)                             
Else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString)
End If

' Call TryParse with NumberStyles.Any and a provider for the fr-FR culture.
' Conversion succeeds because the string is properly formatted 
' For the fr-FR culture.
numericString = "9 031 425 666 123 546,00"
If BigInteger.TryParse(numericString, NumberStyles.Any,
                       New CultureInfo("fr-FR"), number) Then
   Console.WriteLine("'{0}' was converted to {1}.",
                     numericString, number)                             
Else
   Console.WriteLine("Conversion of '{0}' to a BigInteger failed.",
                     numericString)
End If
' The example displays the following output:
'    '  -300   ' was converted to -300.
'    Conversion of '  -300   ' to a BigInteger failed.
'    Conversion of '  -500   ' to a BigInteger failed.
'    'F14237FFAAC086455192' was converted to -69613977002644837412462 (0xf14237ffaac086455192).
'    Conversion of '-3af' to a BigInteger failed.
'    Conversion of ' -300 ' to a BigInteger failed.
'    Conversion of '9,031,425,666,123,546.00' to a BigInteger failed.
'    '9 031 425 666 123 546,00' was converted to 9031425666123546.

Ряд отдельных вызовов TryParse(String, NumberStyles, IFormatProvider, BigInteger) метода передает экземпляр следующего BigIntegerFormatProvider класса, который определяет тильду (~) в качестве отрицательного знака.

public class BigIntegerFormatProvider : IFormatProvider
{
   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(NumberFormatInfo))
      {
         NumberFormatInfo numberFormat = new NumberFormatInfo();
         numberFormat.NegativeSign = "~";
         return numberFormat;
      }
      else
      {
         return null;
      }
   }
}
type BigIntegerFormatProvider() =
    interface IFormatProvider with
        member _.GetFormat(formatType: Type) =
            if formatType = typeof<NumberFormatInfo> then
                let numberFormat = new NumberFormatInfo()
                numberFormat.NegativeSign <- "~"
                numberFormat
            else
                null
Public Class BigIntegerFormatProvider : Implements IFormatProvider
   Public Function GetFormat(formatType As Type) As Object _
                            Implements IFormatProvider.GetFormat
      If formatType Is GetType(NumberFormatInfo) Then
         Dim numberFormat As New NumberFormatInfo
         numberFormat.NegativeSign = "~"
         Return numberFormat
      Else
         Return Nothing
      End If      
   End Function
End Class

Комментарии

Метод TryParse(String, NumberStyles, IFormatProvider, BigInteger) похож на Parse(String, NumberStyles, IFormatProvider) метод , за исключением того, что он не создает исключение в случае сбоя преобразования. Этот метод избавляет от необходимости использовать обработку исключений, чтобы проверить, является ли value объект недопустимым FormatException и не может быть успешно проанализирован.

Параметр style определяет элементы стиля (например, пробелы или положительный или отрицательный знак), которые разрешены в value параметре для успешного выполнения операции синтаксического анализа. Это должно быть сочетание битовых флагов из перечисления NumberStyles . В зависимости от значения styleпараметр value может включать следующие элементы:

[ws] [$][знак][цифры,]digits[.fractional_digits][E[sign]exponential_digits][ws]

Если параметр style включает AllowHexSpecifier, параметр value может включать следующие элементы:

[ws] hexdigits[ws]

Элементы в квадратных скобках ([и]) являются необязательными. Каждый из элементов описан в таблице ниже.

Элемент Описание
ws Необязательный пробел. Пробел может отображаться в начале value , если style включает NumberStyles.AllowLeadingWhite флаг, или в конце value , если style включает NumberStyles.AllowTrailingWhite флаг.
$ Символ валюты, зависящий от языка и региональных параметров. Его положение в строке определяется свойством CurrencyPositivePattern объекта, NumberFormatInfo возвращаемого GetFormat методом provider параметра . Символ валюты может отображаться в , value если style включает NumberStyles.AllowCurrencySymbol флаг .
sign Необязательный знак. Знак может отображаться в начале value , если style включает NumberStyles.AllowLeadingSign флаг, и в конце value , если style включает NumberStyles.AllowTrailingSign флаг. Круглые скобки можно использовать в value , чтобы указать отрицательное значение, если style включает флаг NumberStyles.AllowParentheses .
digits Последовательность цифр от 0 до 9.
, Разделитель групп, зависящий от языка и региональных параметров. Разделитель групп для языка и региональных параметров, заданных параметром , provider может отображаться в value , если style включает флаг NumberStyles.AllowThousands .
. Символ десятичной запятой для конкретного языка и региональных параметров. Символ десятичной запятой языка и региональных параметров, заданных параметром provider , может отображаться в value , если style включает флаг NumberStyles.AllowDecimalPoint .
fractional_digits Одно или несколько вхождений цифры 0. Дробные цифры могут отображаться в value , только если style включает NumberStyles.AllowDecimalPoint флаг .
E Символ "e" или "E", который указывает, что значение представлено в экспоненциальной (научной) нотации. Параметр value может представлять число в экспоненциальной нотации, если style включает флаг NumberStyles.AllowExponent .
exponential_digits Последовательность цифр от 0 до 9. Параметр value может представлять число в экспоненциальной нотации, если style включает флаг NumberStyles.AllowExponent .
hexdigits Последовательность шестнадцатеричных цифр от 0 до f или от 0 до F.

Примечание

Все завершающие символы NUL (U+0000) в s игнорируются операцией синтаксического анализа независимо от значения аргумента style .

Строка только с десятичными цифрами (которая соответствует флагу NumberStyles.None ) всегда успешно анализируется. Большинство остальных элементов управляют элементами NumberStyles , которые могут присутствовать, но не обязательно должны присутствовать в этой входной строке. В следующей таблице показано, как отдельные NumberStyles элементы влияют на элементы, которые могут присутствовать в value.

Не составные NumberStyles значения Элементы, разрешенные в значении в дополнение к цифрам
None Только десятичные цифры.
AllowDecimalPoint Элементы запятой (.) и fractional_digits . Однако fractional_digits должен состоять только из одной или нескольких цифр 0, иначе метод возвращает false.
AllowExponent Символ "e" или "E", обозначающий экспоненциальную нотацию, а также exponential_digits. Если value представляет число в экспоненциальной нотации, оно не может иметь ненулевой дробный компонент.
AllowLeadingWhite Элемент ws в начале value.
AllowTrailingWhite Элемент ws в конце value.
AllowLeadingSign Элемент знака перед цифрами.
AllowTrailingSign Элемент знака после цифр.
AllowParentheses Элемент sign в виде круглых скобок, включающих числовое значение.
AllowThousands Элемент разделителя групп (,).
AllowCurrencySymbol Элемент currency ($).
Currency Все элементы. value Однако не может представлять шестнадцатеричное число или число в экспоненциальной нотации.
Float Элемент ws в начале или конце value, знак в начале valueи символ десятичной запятой (.). Параметр value также может использовать экспоненциальную нотацию.
Number Элементы ws, знак, разделитель групп (,) и десятичная запятая (.).
Any Все элементы. value Однако не может представлять шестнадцатеричное число.

Важно!

Если метод используется TryParse для кругового пути строкового BigInteger представления значения, которое было выведено методом ToString , следует использовать BigInteger.ToString(String) метод с описателем формата "R" для создания строкового BigInteger представления значения. В противном случае строковое представление BigInteger сохраняет только 50 наиболее значимых цифр исходного значения, и данные могут быть потеряны при использовании TryParse метода для восстановления BigInteger значения.

NumberStyles.AllowHexSpecifier Если используется флаг, value должно быть шестнадцатеричным значением. Единственными флагами, которые могут присутствовать в style , являются NumberStyles.AllowLeadingWhite и NumberStyles.AllowTrailingWhite. (Перечисление NumberStyles имеет составной стиль HexNumber, который включает оба флага пробелов.)

Примечание

Если value является строковым представлением шестнадцатеричного числа, ему не может предшествовать какое-либо украшение (например 0x , или &h), которое различает его как шестнадцатеричное число. Это приводит к сбою преобразования.

Если value является шестнадцатеричной строкой, метод интерпретирует value как отрицательное число, TryParse(String, NumberStyles, IFormatProvider, BigInteger) хранящееся с помощью представления дополнения двух, если первые две шестнадцатеричные цифры больше или равны 0x80. Другими словами, метод интерпретирует бит верхнего порядка первого байта в value как бит знака. Чтобы убедиться, что шестнадцатеричная строка правильно интерпретируется как положительное число, первая цифра в value должна иметь нулевое значение. Например, метод интерпретирует 0x80 как отрицательное значение, но интерпретирует или 0x00800x080 как положительное значение. В следующем примере показана разница между шестнадцатеричными строками, представляющими отрицательные и положительные значения.

using System;
using System.Globalization;
using System.Numerics;

public class Example
{
   public static void Main()
   {
      string[] hexStrings = { "80", "E293", "F9A2FF", "FFFFFFFF",
                              "080", "0E293", "0F9A2FF", "0FFFFFFFF",
                              "0080", "00E293", "00F9A2FF", "00FFFFFFFF" };
      BigInteger number = BigInteger.Zero;

      foreach (string hexString in hexStrings)
      {
         if (BigInteger.TryParse(hexString, NumberStyles.AllowHexSpecifier,
                                 null, out number))
            Console.WriteLine("Converted 0x{0} to {1}.", hexString, number);
         else
            Console.WriteLine("Cannot convert '{0}' to a BigInteger.", hexString);
      }
   }
}
// The example displays the following output:
//       Converted 0x80 to -128.
//       Converted 0xE293 to -7533.
//       Converted 0xF9A2FF to -417025.
//       Converted 0xFFFFFFFF to -1.
//       Converted 0x080 to 128.
//       Converted 0x0E293 to 58003.
//       Converted 0x0F9A2FF to 16360191.
//       Converted 0x0FFFFFFFF to 4294967295.
//       Converted 0x0080 to 128.
//       Converted 0x00E293 to 58003.
//       Converted 0x00F9A2FF to 16360191.
//       Converted 0x00FFFFFFFF to 4294967295.
open System.Globalization
open System.Numerics

let hexStrings =
    [| "80"
       "E293"
       "F9A2FF"
       "FFFFFFFF"
       "080"
       "0E293"
       "0F9A2FF"
       "0FFFFFFFF"
       "0080"
       "00E293"
       "00F9A2FF"
       "00FFFFFFFF" |]

for hexString in hexStrings do
    match BigInteger.TryParse(hexString, NumberStyles.AllowHexSpecifier, null) with
    | true, number -> printfn $"Converted 0x{hexString} to {number}."
    | _ -> printfn $"Cannot convert '{hexString}' to a BigInteger."

// The example displays the following output:
//       Converted 0x80 to -128.
//       Converted 0xE293 to -7533.
//       Converted 0xF9A2FF to -417025.
//       Converted 0xFFFFFFFF to -1.
//       Converted 0x080 to 128.
//       Converted 0x0E293 to 58003.
//       Converted 0x0F9A2FF to 16360191.
//       Converted 0x0FFFFFFFF to 4294967295.
//       Converted 0x0080 to 128.
//       Converted 0x00E293 to 58003.
//       Converted 0x00F9A2FF to 16360191.
//       Converted 0x00FFFFFFFF to 4294967295.
Imports System.Globalization
Imports System.Numerics

Module Example
   Public Sub Main()
      Dim hexStrings() As String = { "80", "E293", "F9A2FF", "FFFFFFFF", 
                                     "080", "0E293", "0F9A2FF", "0FFFFFFFF",  
                                     "0080", "00E293", "00F9A2FF", "00FFFFFFFF" }
      Dim number As BigInteger = BigInteger.Zero
      
      For Each hexString As String In hexStrings
         If BigInteger.TryParse(hexString, NumberStyles.AllowHexSpecifier, 
                                Nothing, number) Then
            Console.WriteLine("Converted 0x{0} to {1}.", hexString, number)
         Else
            Console.WriteLine("Cannot convert '{0}' to a BigInteger.", hexString)
         End If
      Next         
   End Sub
End Module
' The example displays the following output:
'       Converted 0x80 to -128.
'       Converted 0xE293 to -7533.
'       Converted 0xF9A2FF to -417025.
'       Converted 0xFFFFFFFF to -1.
'       Converted 0x080 to 128.
'       Converted 0x0E293 to 58003.
'       Converted 0x0F9A2FF to 16360191.
'       Converted 0x0FFFFFFFF to 4294967295.
'       Converted 0x0080 to 128.
'       Converted 0x00E293 to 58003.
'       Converted 0x00F9A2FF to 16360191.
'       Converted 0x00FFFFFFFF to 4294967295.

Параметр provider является реализацией IFormatProvider . Его GetFormat метод возвращает объект , предоставляющий NumberFormatInfo сведения о формате value, зависящее от языка и региональных параметров. Параметр provider может быть любым из следующих:

  • Объект CultureInfo , представляющий язык и региональные параметры, предоставляющие сведения о форматировании. Его GetFormat метод возвращает NumberFormatInfo объект , предоставляющий числовые сведения о форматировании для этого языка и региональных параметров.

  • Объект NumberFormatInfo , предоставляющий числовые сведения о форматировании. (Его реализация GetFormat просто возвращает себя.)

  • Пользовательский объект, реализующий IFormatProvider. Его GetFormat метод создает экземпляр и возвращает NumberFormatInfo объект , предоставляющий сведения о форматировании.

Если provider имеет значение null, NumberFormatInfo используется объект для текущего языка и региональных параметров.

См. также раздел

Применяется к