Int32.TryParse Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Преобразует строковое представление числа в 32-разрядное целое число со знаком. Возвращаемое значение указывает, выполнена ли операция успешно.
Перегрузки
TryParse(String, IFormatProvider, Int32) |
Пытается проанализировать строку в значение. |
TryParse(ReadOnlySpan<Char>, Int32) |
Преобразует представление диапазона числа в формате языка и региональных параметров в его 32-разрядное целое число со знаком. Возвращаемое значение указывает, успешно ли выполнено преобразование. |
TryParse(String, Int32) |
Преобразует строковое представление числа в 32-разрядное целое число со знаком. Возвращаемое значение указывает, успешно ли выполнено преобразование. |
TryParse(ReadOnlySpan<Byte>, IFormatProvider, Int32) |
Пытается проанализировать диапазон символов UTF-8 в значение. |
TryParse(ReadOnlySpan<Char>, IFormatProvider, Int32) |
Пытается проанализировать диапазон символов в значение. |
TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Int32) |
Пытается проанализировать диапазон символов UTF-8 в значение. |
TryParse(ReadOnlySpan<Byte>, Int32) |
Пытается преобразовать диапазон символов UTF-8, содержащий строковое представление числа в 32-разрядное целое число со знаком. |
TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Int32) |
Преобразует представление диапазона числа в указанном стиле и формате языка и региональных параметров в его 32-разрядное целое число со знаком. Возвращаемое значение указывает, успешно ли выполнено преобразование. |
TryParse(String, NumberStyles, IFormatProvider, Int32) |
Преобразует строковое представление числа в указанном стиле и формате языка и региональных параметров в его 32-разрядное целое число со знаком. Возвращаемое значение указывает, успешно ли выполнено преобразование. |
TryParse(String, IFormatProvider, Int32)
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
Пытается проанализировать строку в значение.
public:
static bool TryParse(System::String ^ s, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result) = IParsable<int>::TryParse;
public static bool TryParse (string? s, IFormatProvider? provider, out int result);
static member TryParse : string * IFormatProvider * int -> bool
Public Shared Function TryParse (s As String, provider As IFormatProvider, ByRef result As Integer) As Boolean
Параметры
- s
- String
Строка для синтаксического анализа.
- provider
- IFormatProvider
Объект, предоставляющий сведения о форматировании, зависящее от языка и региональных параметров, о s
.
- result
- Int32
Когда этот метод возвращается, содержит результат успешного анализа s
или неопределенного значения при сбое.
Возвращаемое значение
true
, если s
был успешно проанализирован; в противном случае false
.
Применяется к
TryParse(ReadOnlySpan<Char>, Int32)
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
Преобразует представление диапазона числа в формате языка и региональных параметров в его 32-разрядное целое число со знаком. Возвращаемое значение указывает, успешно ли выполнено преобразование.
public:
static bool TryParse(ReadOnlySpan<char> s, [Runtime::InteropServices::Out] int % result);
public static bool TryParse (ReadOnlySpan<char> s, out int result);
static member TryParse : ReadOnlySpan<char> * int -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), ByRef result As Integer) As Boolean
Параметры
- s
- ReadOnlySpan<Char>
Диапазон, содержащий символы, представляющие число для преобразования.
- result
- Int32
При возврате этого метода содержит 32-разрядное целочисленное значение со знаком, эквивалентное числу, содержаемого в s
, если преобразование выполнено успешно или равно нулю, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр s
null
или Empty или представляет число меньше Int32.MinValue или больше Int32.MaxValue. Этот параметр передается неинициализирован; любое исходное значение, предоставленное в result
, будет перезаписан.
Возвращаемое значение
true
, если s
был успешно преобразован; в противном случае false
.
Применяется к
TryParse(String, Int32)
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
Преобразует строковое представление числа в 32-разрядное целое число со знаком. Возвращаемое значение указывает, успешно ли выполнено преобразование.
public:
static bool TryParse(System::String ^ s, [Runtime::InteropServices::Out] int % result);
public static bool TryParse (string s, out int result);
public static bool TryParse (string? s, out int result);
static member TryParse : string * int -> bool
Public Shared Function TryParse (s As String, ByRef result As Integer) As Boolean
Параметры
- s
- String
Строка, содержащая число для преобразования.
- result
- Int32
При возврате этого метода содержит 32-разрядное целочисленное значение со знаком, эквивалентное числу, содержаемого в s
, если преобразование выполнено успешно или равно нулю, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр s
null
или Empty, не имеет правильного формата или представляет число меньше Int32.MinValue или больше Int32.MaxValue. Этот параметр передается неинициализирован; любое исходное значение, предоставленное в result
, будет перезаписан.
Возвращаемое значение
true
, если s
был успешно преобразован; в противном случае false
.
Примеры
В следующем примере вызывается метод Int32.TryParse(String, Int32) с несколькими разными строковыми значениями.
using namespace System;
void TryToParse(String^ value)
{
Int32 number;
bool result = Int32::TryParse(value, number);
if (result) {
Console::WriteLine("Converted '{0}' to {1}.", value, number);
}
else {
if (value == nullptr) value = "";
Console::WriteLine("Attempted conversion of '{0}' failed.", value);
}
}
void main()
{
TryToParse(nullptr);
TryToParse("160519");
TryToParse("9432.0");
TryToParse("16,667");
TryToParse(" -322 ");
TryToParse("+4302");
TryToParse("(100);");
TryToParse("01FA");
}
// The example displays the following output:
// Attempted conversion of '' failed.
// Converted '160519' to 160519.
// Attempted conversion of '9432.0' failed.
// Attempted conversion of '16,667' failed.
// Converted ' -322 ' to -322.
// Converted '+4302' to 4302.
// Attempted conversion of '(100);' failed.
// Attempted conversion of '01FA' failed.
using System;
public class Example
{
public static void Main()
{
string[] values = { null, "160519", "9432.0", "16,667",
" -322 ", "+4302", "(100);", "01FA" };
foreach (var value in values)
{
int number;
bool success = int.TryParse(value, out number);
if (success)
{
Console.WriteLine($"Converted '{value}' to {number}.");
}
else
{
Console.WriteLine($"Attempted conversion of '{value ?? "<null>"}' failed.");
}
}
}
}
// The example displays the following output:
// Attempted conversion of '<null>' failed.
// Converted '160519' to 160519.
// Attempted conversion of '9432.0' failed.
// Attempted conversion of '16,667' failed.
// Converted ' -322 ' to -322.
// Converted '+4302' to 4302.
// Attempted conversion of '(100);' failed.
// Attempted conversion of '01FA' failed.
open System
let values =
[ null; "160519"; "9432.0"; "16,667"
" -322 "; "+4302"; "(100);"; "01FA" ]
for value in values do
match Int32.TryParse value with
| true, number ->
printfn $"Converted '{value}' to {number}."
| _ ->
printfn $"""Attempted conversion of '{if isNull value then "<null>" else value}' failed."""
// The example displays the following output:
// Attempted conversion of '<null>' failed.
// Converted '160519' to 160519.
// Attempted conversion of '9432.0' failed.
// Attempted conversion of '16,667' failed.
// Converted ' -322 ' to -322.
// Converted '+4302' to 4302.
// Attempted conversion of '(100);' failed.
// Attempted conversion of '01FA' failed.
Module Example
Public Sub Main()
Dim values() As String = { Nothing, "160519", "9432.0", "16,667",
" -322 ", "+4302", "(100);",
"01FA" }
For Each value In values
Dim number As Integer
Dim success As Boolean = Int32.TryParse(value, number)
If success Then
Console.WriteLine("Converted '{0}' to {1}.", value, number)
Else
Console.WriteLine("Attempted conversion of '{0}' failed.",
If(value ,"<null>"))
End If
Next
End Sub
End Module
' The example displays the following output to the console:
' Attempted conversion of '<null>' failed.
' Converted '160519' to 160519.
' Attempted conversion of '9432.0' failed.
' Attempted conversion of '16,667' failed.
' Converted ' -322 ' to -322.
' Converted '+4302' to 4302.
' Attempted conversion of '(100)' failed.
' Attempted conversion of '01FA' failed.
Некоторые строки, которые метод TryParse(String, Int32) не может преобразовать в этом примере:
"9432.0". Преобразование завершается ошибкой, так как строка не может содержать десятичный разделитель; он должен содержать только целочисленные цифры.
"16,667". Преобразование завершается ошибкой, так как строка не может содержать разделители групп; он должен содержать только целочисленные цифры.
"(100)". Преобразование завершается ошибкой, так как строка не может содержать отрицательный знак, отличный от знака, определенного NumberFormatInfo.NegativeSign текущего языка и NumberFormatInfo.NumberNegativePattern свойств.
"01FA". Преобразование завершается ошибкой, так как строка не может содержать шестнадцатеричные цифры; Он должен содержать только десятичные цифры.
Комментарии
Метод TryParse похож на метод Parse, за исключением того, что метод TryParse не создает исключение, если преобразование завершается ошибкой. Это устраняет необходимость использовать обработку исключений для проверки FormatException в случае, если s
является недопустимым и не может быть успешно проанализирован.
Параметр s
содержит ряд форм:
[ws] [знак]цифры[ws]
Элементы в квадратных скобках ([ и ]) являются необязательными. В следующей таблице описан каждый элемент.
Элемент | Описание |
---|---|
ws | Необязательный пробел. |
знак | Необязательный знак. |
цифры | Последовательность цифр от 0 до 9. |
Параметр s
интерпретируется с помощью стиля NumberStyles.Integer. Помимо десятичных цифр разрешены только начальные и конечные пробелы вместе с начальным знаком. Чтобы явно определить элементы стиля вместе с сведениями о форматировании, зависящими от языка и региональных параметров, которые могут присутствовать в s
, используйте метод Int32.TryParse(String, NumberStyles, IFormatProvider, Int32).
Параметр s
анализируется с помощью сведений о форматировании в объекте NumberFormatInfo, инициализированном для текущего языка и региональных параметров системы. Дополнительные сведения см. в CurrentInfo.
Эта перегрузка метода TryParse интерпретирует все цифры в параметре s
как десятичные цифры. Чтобы проанализировать строковое представление шестнадцатеричного числа, вызовите перегрузку Int32.TryParse(String, NumberStyles, IFormatProvider, Int32).
См. также раздел
- Parse(String)
- ToString()
- синтаксический анализ числовых строк в .NET
- пример: служебная программа форматирования WinForms .NET Core (C#)
- пример : служебная программа форматирования WinForms .NET Core (Visual Basic)
Применяется к
TryParse(ReadOnlySpan<Byte>, IFormatProvider, Int32)
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
Пытается проанализировать диапазон символов UTF-8 в значение.
public:
static bool TryParse(ReadOnlySpan<System::Byte> utf8Text, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result) = IUtf8SpanParsable<int>::TryParse;
public static bool TryParse (ReadOnlySpan<byte> utf8Text, IFormatProvider? provider, out int result);
static member TryParse : ReadOnlySpan<byte> * IFormatProvider * int -> bool
Public Shared Function TryParse (utf8Text As ReadOnlySpan(Of Byte), provider As IFormatProvider, ByRef result As Integer) As Boolean
Параметры
- utf8Text
- ReadOnlySpan<Byte>
Диапазон символов UTF-8 для анализа.
- provider
- IFormatProvider
Объект, предоставляющий сведения о форматировании, зависящее от языка и региональных параметров, о utf8Text
.
- result
- Int32
При возврате содержит результат успешного анализа utf8Text
или неопределенного значения при сбое.
Возвращаемое значение
true
, если utf8Text
был успешно проанализирован; в противном случае false
.
Применяется к
TryParse(ReadOnlySpan<Char>, IFormatProvider, Int32)
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
Пытается проанализировать диапазон символов в значение.
public:
static bool TryParse(ReadOnlySpan<char> s, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result) = ISpanParsable<int>::TryParse;
public static bool TryParse (ReadOnlySpan<char> s, IFormatProvider? provider, out int result);
static member TryParse : ReadOnlySpan<char> * IFormatProvider * int -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), provider As IFormatProvider, ByRef result As Integer) As Boolean
Параметры
- s
- ReadOnlySpan<Char>
Диапазон символов для синтаксического анализа.
- provider
- IFormatProvider
Объект, предоставляющий сведения о форматировании, зависящее от языка и региональных параметров, о s
.
- result
- Int32
При возврате этого метода содержит результат успешного анализа s
или неопределенное значение при сбое.
Возвращаемое значение
true
, если s
был успешно проанализирован; в противном случае false
.
Применяется к
TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Int32)
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
Пытается проанализировать диапазон символов UTF-8 в значение.
public:
static bool TryParse(ReadOnlySpan<System::Byte> utf8Text, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result) = System::Numerics::INumberBase<int>::TryParse;
public static bool TryParse (ReadOnlySpan<byte> utf8Text, System.Globalization.NumberStyles style, IFormatProvider? provider, out int result);
static member TryParse : ReadOnlySpan<byte> * System.Globalization.NumberStyles * IFormatProvider * int -> bool
Public Shared Function TryParse (utf8Text As ReadOnlySpan(Of Byte), style As NumberStyles, provider As IFormatProvider, ByRef result As Integer) As Boolean
Параметры
- utf8Text
- ReadOnlySpan<Byte>
Диапазон символов UTF-8 для анализа.
- style
- NumberStyles
Побитовое сочетание стилей чисел, которые могут присутствовать в utf8Text
.
- provider
- IFormatProvider
Объект, предоставляющий сведения о форматировании, зависящее от языка и региональных параметров, о utf8Text
.
- result
- Int32
При возврате содержит результат успешного анализа utf8Text
или неопределенного значения при сбое.
Возвращаемое значение
true
, если utf8Text
был успешно проанализирован; в противном случае false
.
Применяется к
TryParse(ReadOnlySpan<Byte>, Int32)
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
Пытается преобразовать диапазон символов UTF-8, содержащий строковое представление числа в 32-разрядное целое число со знаком.
public:
static bool TryParse(ReadOnlySpan<System::Byte> utf8Text, [Runtime::InteropServices::Out] int % result);
public static bool TryParse (ReadOnlySpan<byte> utf8Text, out int result);
static member TryParse : ReadOnlySpan<byte> * int -> bool
Public Shared Function TryParse (utf8Text As ReadOnlySpan(Of Byte), ByRef result As Integer) As Boolean
Параметры
- utf8Text
- ReadOnlySpan<Byte>
Диапазон, содержащий символы UTF-8, представляющие число для преобразования.
- result
- Int32
При возврате этого метода содержит 32-разрядное целое число со знаком, эквивалентное числу, содержаму в utf8Text
, если преобразование выполнено успешно, или ноль, если преобразование завершилось ошибкой. Этот параметр передается неинициализирован; любое исходное значение, предоставленное в результате, будет перезаписан.
Возвращаемое значение
true
, если utf8Text
был успешно преобразован; в противном случае false
.
Применяется к
TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Int32)
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
Преобразует представление диапазона числа в указанном стиле и формате языка и региональных параметров в его 32-разрядное целое число со знаком. Возвращаемое значение указывает, успешно ли выполнено преобразование.
public:
static bool TryParse(ReadOnlySpan<char> s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result);
public:
static bool TryParse(ReadOnlySpan<char> s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result) = System::Numerics::INumberBase<int>::TryParse;
public static bool TryParse (ReadOnlySpan<char> s, System.Globalization.NumberStyles style, IFormatProvider? provider, out int result);
public static bool TryParse (ReadOnlySpan<char> s, System.Globalization.NumberStyles style, IFormatProvider provider, out int result);
static member TryParse : ReadOnlySpan<char> * System.Globalization.NumberStyles * IFormatProvider * int -> bool
Public Shared Function TryParse (s As ReadOnlySpan(Of Char), style As NumberStyles, provider As IFormatProvider, ByRef result As Integer) As Boolean
Параметры
- s
- ReadOnlySpan<Char>
Диапазон, содержащий символы, представляющие число для преобразования. Диапазон интерпретируется с помощью стиля, заданного style
.
- style
- NumberStyles
Побитовое сочетание значений перечисления, указывающее элементы стиля, которые могут присутствовать в s
. Обычное значение, указываемое, — Integer.
- provider
- IFormatProvider
Объект, предоставляющий сведения о форматировании, зависящее от языка и региональных параметров, о s
.
- result
- Int32
При возврате этого метода содержит 32-разрядное целочисленное значение со знаком, эквивалентное числу, содержаемого в s
, если преобразование выполнено успешно или равно нулю, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр s
null
или Empty, не соответствует формату style
или представляет число меньше Int32.MinValue или больше Int32.MaxValue. Этот параметр передается неинициализирован; любое исходное значение, предоставленное в result
, будет перезаписан.
Возвращаемое значение
true
, если s
был успешно преобразован; в противном случае false
.
Применяется к
TryParse(String, NumberStyles, IFormatProvider, Int32)
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
- Исходный код:
- Int32.cs
Преобразует строковое представление числа в указанном стиле и формате языка и региональных параметров в его 32-разрядное целое число со знаком. Возвращаемое значение указывает, успешно ли выполнено преобразование.
public:
static bool TryParse(System::String ^ s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result);
public:
static bool TryParse(System::String ^ s, System::Globalization::NumberStyles style, IFormatProvider ^ provider, [Runtime::InteropServices::Out] int % result) = System::Numerics::INumberBase<int>::TryParse;
public static bool TryParse (string s, System.Globalization.NumberStyles style, IFormatProvider provider, out int result);
public static bool TryParse (string? s, System.Globalization.NumberStyles style, IFormatProvider? provider, out int result);
static member TryParse : string * System.Globalization.NumberStyles * IFormatProvider * int -> bool
Public Shared Function TryParse (s As String, style As NumberStyles, provider As IFormatProvider, ByRef result As Integer) As Boolean
Параметры
- s
- String
Строка, содержащая число для преобразования. Строка интерпретируется с помощью стиля, заданного style
.
- style
- NumberStyles
Побитовое сочетание значений перечисления, указывающее элементы стиля, которые могут присутствовать в s
. Обычное значение, указываемое, — Integer.
- provider
- IFormatProvider
Объект, предоставляющий сведения о форматировании, зависящее от языка и региональных параметров, о s
.
- result
- Int32
При возврате этого метода содержит 32-разрядное целочисленное значение со знаком, эквивалентное числу, содержаемого в s
, если преобразование выполнено успешно или равно нулю, если преобразование завершилось ошибкой. Преобразование завершается ошибкой, если параметр s
null
или Empty, не соответствует формату style
или представляет число меньше Int32.MinValue или больше Int32.MaxValue. Этот параметр передается неинициализирован; любое исходное значение, предоставленное в result
, будет перезаписан.
Возвращаемое значение
true
, если s
был успешно преобразован; в противном случае false
.
Исключения
style
не является значением NumberStyles.
-или-
style
не является сочетанием значений AllowHexSpecifier и HexNumber.
Примеры
В следующем примере вызывается метод Int32.TryParse(String, NumberStyles, IFormatProvider, Int32) с рядом различных строк и NumberStyles значений.
using namespace System;
using namespace System::Globalization;
void CallTryParse(String^ stringToConvert, NumberStyles styles)
{
Int32 number;
CultureInfo^ provider;
// If currency symbol is allowed, use en-US culture.
if (((Int32) (styles & NumberStyles::AllowCurrencySymbol)) > 0)
provider = gcnew CultureInfo("en-US");
else
provider = CultureInfo::InvariantCulture;
bool result = Int32::TryParse(stringToConvert, styles,
provider, number);
if (result)
Console::WriteLine("Converted '{0}' to {1}.", stringToConvert, number);
else
Console::WriteLine("Attempted conversion of '{0}' failed.",
Convert::ToString(stringToConvert));
}
void main()
{
String^ numericString;
NumberStyles styles;
numericString = "106779";
styles = NumberStyles::Integer;
CallTryParse(numericString, styles);
numericString = "-30677";
styles = NumberStyles::None;
CallTryParse(numericString, styles);
styles = NumberStyles::AllowLeadingSign;
CallTryParse(numericString, styles);
numericString = "301677-";
CallTryParse(numericString, styles);
styles = styles | NumberStyles::AllowTrailingSign;
CallTryParse(numericString, styles);
numericString = "$10634";
styles = NumberStyles::Integer;
CallTryParse(numericString, styles);
styles = NumberStyles::Integer | NumberStyles::AllowCurrencySymbol;
CallTryParse(numericString, styles);
numericString = "10345.00";
styles = NumberStyles::Integer | NumberStyles::AllowDecimalPoint;
CallTryParse(numericString, styles);
numericString = "10345.72";
styles = NumberStyles::Integer | NumberStyles::AllowDecimalPoint;
CallTryParse(numericString, styles);
numericString = "22,593";
styles = NumberStyles::Integer | NumberStyles::AllowThousands;
CallTryParse(numericString, styles);
numericString = "12E-01";
styles = NumberStyles::Integer | NumberStyles::AllowExponent;
CallTryParse(numericString, styles);
numericString = "12E03";
CallTryParse(numericString, styles);
numericString = "80c1";
CallTryParse(numericString, NumberStyles::HexNumber);
numericString = "0x80C1";
CallTryParse(numericString, NumberStyles::HexNumber);
Console::ReadLine();
}
// The example displays the following output:
// Converted '106779' to 106779.
// Attempted conversion of '-30677' failed.
// Converted '-30677' to -30677.
// Attempted conversion of '301677-' failed.
// Converted '301677-' to -301677.
// Attempted conversion of '$10634' failed.
// Converted '$10634' to 10634.
// Converted '10345.00' to 10345.
// Attempted conversion of '10345.72' failed.
// Converted '22,593' to 22593.
// Attempted conversion of '12E-01' failed.
// Converted '12E03' to 12000.
// Converted '80c1' to 32961.
// Attempted conversion of '0x80C1' failed.
using System;
using System.Globalization;
public class StringParsing
{
public static void Main()
{
string numericString;
NumberStyles styles;
numericString = "106779";
styles = NumberStyles.Integer;
CallTryParse(numericString, styles);
numericString = "-30677";
styles = NumberStyles.None;
CallTryParse(numericString, styles);
styles = NumberStyles.AllowLeadingSign;
CallTryParse(numericString, styles);
numericString = "301677-";
CallTryParse(numericString, styles);
styles = styles | NumberStyles.AllowTrailingSign;
CallTryParse(numericString, styles);
numericString = "$10634";
styles = NumberStyles.Integer;
CallTryParse(numericString, styles);
styles = NumberStyles.Integer | NumberStyles.AllowCurrencySymbol;
CallTryParse(numericString, styles);
numericString = "10345.00";
styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
CallTryParse(numericString, styles);
numericString = "10345.72";
styles = NumberStyles.Integer | NumberStyles.AllowDecimalPoint;
CallTryParse(numericString, styles);
numericString = "22,593";
styles = NumberStyles.Integer | NumberStyles.AllowThousands;
CallTryParse(numericString, styles);
numericString = "12E-01";
styles = NumberStyles.Integer | NumberStyles.AllowExponent;
CallTryParse(numericString, styles);
numericString = "12E03";
CallTryParse(numericString, styles);
numericString = "80c1";
CallTryParse(numericString, NumberStyles.HexNumber);
numericString = "0x80C1";
CallTryParse(numericString, NumberStyles.HexNumber);
}
private static void CallTryParse(string stringToConvert, NumberStyles styles)
{
CultureInfo provider;
// If currency symbol is allowed, use en-US culture.
if ((styles & NumberStyles.AllowCurrencySymbol) > 0)
provider = new CultureInfo("en-US");
else
provider = CultureInfo.InvariantCulture;
bool success = int.TryParse(stringToConvert, styles,
provider, out int number);
if (success)
Console.WriteLine($"Converted '{stringToConvert}' to {number}.");
else
Console.WriteLine($"Attempted conversion of '{stringToConvert}' failed.");
}
}
// The example displays the following output to the console:
// Converted '106779' to 106779.
// Attempted conversion of '-30677' failed.
// Converted '-30677' to -30677.
// Attempted conversion of '301677-' failed.
// Converted '301677-' to -301677.
// Attempted conversion of '$10634' failed.
// Converted '$10634' to 10634.
// Converted '10345.00' to 10345.
// Attempted conversion of '10345.72' failed.
// Converted '22,593' to 22593.
// Attempted conversion of '12E-01' failed.
// Converted '12E03' to 12000.
// Converted '80c1' to 32961.
// Attempted conversion of '0x80C1' failed.
open System
open System.Globalization
let callTryParse (stringToConvert: string) styles =
let provider =
// If currency symbol is allowed, use en-US culture.
if int (styles &&& NumberStyles.AllowCurrencySymbol) > 0 then
CultureInfo "en-US"
else
CultureInfo.InvariantCulture
match Int32.TryParse(stringToConvert, styles, provider) with
| true, number ->
printfn $"Converted '{stringToConvert}' to {number}."
| _ ->
printfn $"Attempted conversion of '{stringToConvert}' failed."
[<EntryPoint>]
let main _ =
let numericString = "106779"
let styles = NumberStyles.Integer
callTryParse numericString styles
let numericString = "-30677"
let styles = NumberStyles.None
callTryParse numericString styles
let styles = NumberStyles.AllowLeadingSign
callTryParse numericString styles
let numericString = "301677-"
callTryParse numericString styles
let styles = styles ||| NumberStyles.AllowTrailingSign
callTryParse numericString styles
let numericString = "$10634"
let styles = NumberStyles.Integer
callTryParse numericString styles
let styles = NumberStyles.Integer ||| NumberStyles.AllowCurrencySymbol
callTryParse numericString styles
let numericString = "10345.00"
let styles = NumberStyles.Integer ||| NumberStyles.AllowDecimalPoint
callTryParse numericString styles
let numericString = "10345.72"
let styles = NumberStyles.Integer ||| NumberStyles.AllowDecimalPoint
callTryParse numericString styles
let numericString = "22,593"
let styles = NumberStyles.Integer ||| NumberStyles.AllowThousands
callTryParse numericString styles
let numericString = "12E-01"
let styles = NumberStyles.Integer ||| NumberStyles.AllowExponent
callTryParse numericString styles
let numericString = "12E03"
callTryParse numericString styles
let numericString = "80c1"
callTryParse numericString NumberStyles.HexNumber
let numericString = "0x80C1"
callTryParse numericString NumberStyles.HexNumber
0
// The example displays the following output to the console:
// Converted '106779' to 106779.
// Attempted conversion of '-30677' failed.
// Converted '-30677' to -30677.
// Attempted conversion of '301677-' failed.
// Converted '301677-' to -301677.
// Attempted conversion of '$10634' failed.
// Converted '$10634' to 10634.
// Converted '10345.00' to 10345.
// Attempted conversion of '10345.72' failed.
// Converted '22,593' to 22593.
// Attempted conversion of '12E-01' failed.
// Converted '12E03' to 12000.
// Converted '80c1' to 32961.
// Attempted conversion of '0x80C1' failed.
Imports System.Globalization
Module StringParsing
Public Sub Main()
Dim numericString As String
Dim styles As NumberStyles
numericString = "106779"
styles = NumberStyles.Integer
CallTryParse(numericString, styles)
numericString = "-30677"
styles = NumberStyles.None
CallTryParse(numericString, styles)
styles = NumberStyles.AllowLeadingSign
CallTryParse(numericString, styles)
numericString = "301677-"
CallTryParse(numericString, styles)
styles = styles Or NumberStyles.AllowTrailingSign
CallTryParse(numericString, styles)
numericString = "$10634"
styles = NumberStyles.Integer
CallTryParse(numericString, styles)
styles = NumberStyles.Integer Or NumberStyles.AllowCurrencySymbol
CallTryParse(numericString, styles)
numericString = "10345.00"
styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
CallTryParse(numericString, styles)
numericString = "10345.72"
styles = NumberStyles.Integer Or NumberStyles.AllowDecimalPoint
CallTryParse(numericString, styles)
numericString = "22,593"
styles = NumberStyles.Integer Or NumberStyles.AllowThousands
CallTryParse(numericString, styles)
numericString = "12E-01"
styles = NumberStyles.Integer Or NumberStyles.AllowExponent
CallTryParse(numericString, styles)
numericString = "12E03"
CallTryParse(numericString, styles)
numericString = "80c1"
CallTryParse(numericString, NumberStyles.HexNumber)
numericString = "0x80C1"
CallTryParse(numericString, NumberStyles.HexNumber)
End Sub
Private Sub CallTryParse(stringToConvert As String, styles AS NumberStyles)
Dim number As Integer
Dim provider As CultureInfo
' If currency symbol is allowed, use en-US culture.
If CBool(styles And NumberStyles.AllowCurrencySymbol) Then
provider = CultureInfo.CurrentCulture
Else
provider = New CultureInfo("en-US")
End If
Dim result As Boolean = Int32.TryParse(stringToConvert, styles, _
provider, number)
If result Then
Console.WriteLine("Converted '{0}' to {1}.", stringToConvert, number)
Else
Console.WriteLine("Attempted conversion of '{0}' failed.", _
Convert.ToString(stringToConvert))
End If
End Sub
End Module
' The example displays the following output to the console:
' Converted '106779' to 106779.
' Attempted conversion of '-30677' failed.
' Converted '-30677' to -30677.
' Attempted conversion of '301677-' failed.
' Converted '301677-' to -301677.
' Attempted conversion of '$10634' failed.
' Converted '$10634' to 10634.
' Converted '10345.00' to 10345.
' Attempted conversion of '10345.72' failed.
' Converted '22,593' to 22593.
' Attempted conversion of '12E-01' failed.
' Converted '12E03' to 12000.
' Converted '80c1' to 32961.
' Attempted conversion of '0x80C1' failed.
Комментарии
Метод TryParse похож на метод Parse, за исключением того, что метод TryParse не создает исключение, если преобразование завершается ошибкой. Это устраняет необходимость использовать обработку исключений для проверки FormatException в случае, если s
является недопустимым и не может быть успешно проанализирован.
Параметр style
определяет элементы стиля (например, пробел или положительный или отрицательный знак), которые разрешены в параметре s
для успешной операции синтаксического анализа. Это должно быть сочетание битовых флагов из перечисления NumberStyles. В зависимости от значения style
параметр s
может включать следующие элементы:
[ws] [$] [знак] [цифры,]цифры[.fractional_digits][знак][знак][цифры][ws]
Или, если параметр style
включает AllowHexSpecifier:
[ws]hexdigits[ws]
Элементы в квадратных скобках ([ и ]) являются необязательными. В следующей таблице описан каждый элемент.
Элемент | Описание |
---|---|
ws | Необязательный пробел. Пробел может отображаться в начале s , если style включает флаг NumberStyles.AllowLeadingWhite или в конце s , если style включает флаг NumberStyles.AllowTrailingWhite. |
$ | Символ валюты, зависящий от языка и региональных параметров. Его положение в строке определяется свойством CurrencyPositivePattern объекта NumberFormatInfo, возвращаемого методом GetFormat параметра provider . Символ валюты может отображаться в s , если style включает флаг NumberStyles.AllowCurrencySymbol. |
знак | Необязательный знак. Символ знака может отображаться в s , если style включает флаги NumberStyles.AllowLeadingSign или NumberStyles.AllowTrailingSign. |
цифры | Последовательность цифр от 0 до 9. |
, | Разделитель тысяч, зависящих от языка и региональных параметров. Разделитель тысяч языка и региональных параметров, указанных provider , может отображаться в s , если style включает флаг NumberStyles.AllowThousands. |
. | Символ десятичной запятой для конкретного языка и региональных параметров. Символ десятичной запятой языка и региональных параметров, указанных provider , может отображаться в s , если style включает флаг NumberStyles.AllowDecimalPoint. |
fractional_digits | Одно или несколько вхождений цифры 0. Дробные цифры могут отображаться в s только в том случае, если style включает флаг NumberStyles.AllowDecimalPoint. |
e | Символ e или E, указывающий, что значение представлено в экспоненциальной нотации. Параметр s может представлять число в экспоненциальной нотации, если style включает флаг NumberStyles.AllowExponent. |
шестнадцатеричные | Последовательность шестнадцатеричных цифр от 0 до f или 0 до F. |
Заметка
Все символы NUL (U+0000) в s
игнорируются операцией синтаксического анализа независимо от значения аргумента style
.
Строка только с десятичными цифрами (которая соответствует флагу NumberStyles.None) всегда анализируется успешно. Большинство оставшихся элементов управления элементами управления NumberStyles, которые могут быть, но не обязательно должны присутствовать в этой входной строке. В следующей таблице показано, как отдельные элементы NumberStyles влияют на элементы, которые могут присутствовать в s
.
Не составные значения NumberStyles | Элементы, разрешенные в s в дополнение к цифрам |
---|---|
NumberStyles.None | Только десятичные цифры. |
NumberStyles.AllowDecimalPoint | Десятичная точка (.) и элементы fractional_digits. Однако fractional_digits должны состоять только из одного или нескольких 0 цифр, или метод возвращает false . |
NumberStyles.AllowExponent | Параметр s также может использовать экспоненциальную нотацию. Если s представляет число в экспоненциальной нотации, оно должно представлять целое число в диапазоне типа данных Int32 без ненулевых дробных компонентов. |
NumberStyles.AllowLeadingWhite | Элемент ws в начале s . |
NumberStyles.AllowTrailingWhite | Элемент ws в конце s . |
NumberStyles.AllowLeadingSign | Знак может появиться перед цифрами. |
NumberStyles.AllowTrailingSign | Знак может появиться после цифр. |
NumberStyles.AllowParentheses | Элемент знака |
NumberStyles.AllowThousands | Элемент разделителя тысяч (,) . |
NumberStyles.AllowCurrencySymbol | Элемент $. |
NumberStyles.Currency | Все элементы. Параметр s не может представлять шестнадцатеричное число или число в экспоненциальной нотации. |
NumberStyles.Float | Элемент ws в начале или конце s , знак знак в начале s и символ десятичной запятой (.) . Параметр s также может использовать экспоненциальную нотацию. |
NumberStyles.Number | Элементы ws, знак, разделитель тысяч (,) и десятичная точка (.) элементов. |
NumberStyles.Any | Все стили, кроме s не могут представлять шестнадцатеричное число. |
Если используется флаг NumberStyles.AllowHexSpecifier, s
должно быть шестнадцатеричным значением без префикса. Например, синтаксический анализ C9AF3 успешно выполняется, но "0xC9AF3" не выполняется. Единственными другими флагами, которые могут присутствовать в style
, являются NumberStyles.AllowLeadingWhite и NumberStyles.AllowTrailingWhite. (Перечисление NumberStyles имеет составной стиль, NumberStyles.HexNumber, который включает оба флага пробела.)
Параметр provider
— это реализация IFormatProvider, например объект CultureInfo или объект NumberFormatInfo, метод GetFormat которого возвращает объект NumberFormatInfo. Объект NumberFormatInfo предоставляет сведения о формате s
для языка и региональных параметров. Если provider
null
, используется объект NumberFormatInfo для текущего языка и региональных параметров.