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
как отрицательное значение, но интерпретирует или 0x0080
0x080
как положительное значение. В следующем примере показана разница между шестнадцатеричными строками, представляющими отрицательные и положительные значения.
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 используется объект для текущего языка и региональных параметров.