Как я могу конвертировать String в Int?
У меня есть TextBoxD1.Text
и я хочу преобразовать его в int
хранить его в базе данных.
Как я могу это сделать?
36 ответов
Попробуй это:
int x = Int32.Parse(TextBoxD1.Text);
или еще лучше:
int x = 0;
Int32.TryParse(TextBoxD1.Text, out x);
Кроме того, так как Int32.TryParse
возвращает bool
вы можете использовать его возвращаемое значение для принятия решения о результатах попытки разбора:
int x = 0;
if (Int32.TryParse(TextBoxD1.Text, out x))
{
// you know that the parsing attempt
// was successful
}
Если вам интересно, разница между Parse
а также TryParse
лучше всего подытожить так:
Метод TryParse похож на метод Parse, за исключением того, что метод TryParse не выдает исключение, если преобразование завершается неудачно. Это устраняет необходимость использовать обработку исключений для проверки на исключение FormatException в случае, если s является недопустимым и не может быть успешно проанализирован. - MSDN
Convert.ToInt32( TextBoxD1.Text );
Используйте это, если вы уверены, что содержимое текстового поля является допустимым int. Более безопасный вариант
int val = 0;
Int32.TryParse( TextBoxD1.Text, out val );
Это предоставит вам некоторые значения по умолчанию, которые вы можете использовать. Int32.TryParse
также возвращает логическое значение, указывающее, был ли он в состоянии проанализировать или нет, так что вы даже можете использовать его как условие if
заявление.
if( Int32.TryParse( TextBoxD1.Text, out val ){
DoSomething(..);
} else {
HandleBadInput(..);
}
int myInt = int.Parse(TextBoxD1.Text)
Другой способ будет:
bool isConvertible = false;
int myInt = 0;
isConvertible = int.TryParse(TextBoxD1.Text, out myInt);
Разница между ними состоит в том, что первый вызовет исключение, если значение в вашем текстовом поле не может быть преобразовано, тогда как второй просто вернет false.
Будьте осторожны при использовании Convert.ToInt32() на символе!
Он вернет код UTF-16 персонажа!
Если вы получаете доступ к строке только в определенной позиции, используя [i]
Оператор индексации вернет char
и не string
!
String input = "123678";
int x = Convert.ToInt32(input[4]); // returns 55
int x = Convert.ToInt32(input[4].toString()); // returns 7
Вам нужно проанализировать строку, а также убедиться, что она действительно в формате целого числа.
Самый простой способ это:
int parsedInt = 0;
if (int.TryParse(TextBoxD1.Text, out parsedInt))
{
// Code for if the string was valid
}
else
{
// Code for if the string was invalid
}
int x = 0;
int.TryParse(TextBoxD1.Text, out x);
Оператор TryParse возвращает логическое значение, представляющее, успешно ли выполнен анализ. Если это удалось, проанализированное значение сохраняется во втором параметре.
См. Метод Int32.TryParse (String, Int32) для получения более подробной информации.
Наслаждайся этим...
int i = 0;
string s = "123";
i =int.Parse(s);
i = Convert.ToInt32(s);
Хотя здесь уже есть много решений, которые описывают int.Parse
во всех ответах чего-то не хватает. Как правило, строковые представления числовых значений различаются в зависимости от культуры. Элементы числовых строк, такие как символы валюты, разделители групп (или тысяч) и десятичные разделители, различаются в зависимости от культуры.
Если вы хотите создать надежный способ разбора строки на целое число, поэтому важно принять во внимание информацию о культуре. Если вы этого не сделаете, будут использованы текущие настройки культуры. Это может дать пользователю довольно неприятный сюрприз - или даже хуже, если вы анализируете форматы файлов. Если вы просто хотите разобрать английский язык, лучше просто сделать это явным, указав используемые настройки культуры:
var culture = CultureInfo.GetCulture("en-US");
int result = 0;
if (int.TryParse(myString, NumberStyles.Integer, culture, out result))
{
// use result...
}
Для получения дополнительной информации читайте о CultureInfo, в частности NumberFormatInfo на MSDN.
Вы можете написать свой собственный метод расширения
public static class IntegerExtensions
{
public static int ParseInt(this string value, int defaultValue = 0)
{
int parsedValue;
if (int.TryParse(value, out parsedValue))
{
return parsedValue;
}
return defaultValue;
}
public static int? ParseNullableInt(this string value)
{
if (string.IsNullOrEmpty(value))
{
return null;
}
return value.ParseInt();
}
}
И где в коде просто позвоните
int myNumber = someString.ParseInt(); // returns value or 0
int age = someString.ParseInt(18); // with default value 18
int? userId = someString.ParseNullableInt(); // returns value or null
В этом конкретном случае
int yourValue = TextBoxD1.Text.ParseInt();
Преобразование string
в int
можно сделать для: int
, Int32
, Int64
и другие типы данных, отражающие целочисленные типы данных в.NET
Ниже приведен пример этого преобразования:
Этот элемент отображения данных (для информации) инициализирован значением int. То же самое можно сделать прямо, как,
int xxiiqVal = Int32.Parse(strNabcd);
Ex.
string strNii = "";
UsrDataAdapter.SelectCommand.Parameters["@Nii"].Value = Int32.Parse(strNii );
Как объяснено в документации TryParse, TryParse() возвращает логическое значение, которое указывает, что было найдено правильное число:
bool success = Int32.TryParse(TextBoxD1.Text, out val);
if (success)
{
// put val in database
}
else
{
// handle the case that the string doesn't contain a valid number
}
Вы можете преобразовать строку в int многими методами разных типов в C#
Первый в основном используется:
string test = "123";
int x = Convert.ToInt16(test);
если значение int больше, следует использовать тип int32.
Второй:
int x = int.Parse(text);
если вы хотите проверить ошибки, вы можете использовать метод TryParse. Ниже я добавляю тип, допускающий значение NULL;
int i=0;
Int32.TryParse(text, out i) ? i : (int?)null);
Наслаждайтесь своими кодами....
Вы можете использовать либо,
int i = Convert.ToInt32(TextBoxD1.Text);
или же
int i =int.Parse(TextBoxD1.Text);
Вы также можете использовать метод расширения, так что он будет более читабельным (хотя все уже привыкли к обычным функциям Parse).
public static class StringExtensions
{
/// <summary>
/// Converts a string to int.
/// </summary>
/// <param name="value">The string to convert.</param>
/// <returns>The converted integer.</returns>
public static int ParseToInt32(this string value)
{
return int.Parse(value);
}
/// <summary>
/// Checks whether the value is integer.
/// </summary>
/// <param name="value">The string to check.</param>
/// <param name="result">The out int parameter.</param>
/// <returns>true if the value is an integer; otherwise, false.</returns>
public static bool TryParseToInt32(this string value, out int result)
{
return int.TryParse(value, out result);
}
}
И тогда вы можете назвать это так:
Если вы уверены, что ваша строка является целым числом, например, "50".
int num = TextBoxD1.Text.ParseToInt32();
Если вы не уверены и хотите предотвратить сбои.
int num; if (TextBoxD1.Text.TryParseToInt32(out num)) { //The parse was successful, the num has the parsed value. }
Чтобы сделать его более динамичным, чтобы вы могли анализировать его также как double, float и т. Д., Вы можете сделать общее расширение.
Вы можете преобразовать строку в int в C#, используя:
Функции класса преобразования, т. Е. Convert.ToInt16()
, Convert.ToInt32()
, Convert.ToInt64()
или с помощью Parse
а также TryParse
Функции. Примеры приведены здесь.
//May be quite some time ago but I just want throw in some line for any one who may still need it
int intValue;
string strValue = "2021";
try
{
intValue = Convert.ToInt32(strValue);
}
catch
{
//Default Value if conversion fails OR return specified error
// Example
intValue = 2000;
}
Вы можете сделать как ниже без TryParse или встроенных функций
static int convertToInt(string a)
{
int x=0;
for (int i = 0; i < a.Length; i++)
{
int temp=a[i] - '0';
if (temp!=0)
{
x += temp * (int)Math.Pow(10, (a.Length - (i+1)));
}
}
return x ;
}
Это сделало бы
string x=TextBoxD1.Text;
int xi=Convert.ToInt32(x);
Или вы можете использовать
int xi=Int32.Parse(x);
Обратитесь в Microsoft Developer Network за дополнительной информацией.
Если вы знаете, что строка является целым числом, выполните:
int value = int.Parse(TextBoxD1.Text);
Если вы не знаете, что строка является целым числом, делайте это безопасно с помощью
TryParse
.
В
C# 7.0
вы можете использовать объявление встроенной переменной .
- Если синтаксический анализ успешен - значение = его проанализированное значение.
- Если разобрать не удалось - значение = 0.
Код:
if (int.TryParse(TextBoxD1.Text, out int value))
{
// Parse succeed
}
Недостаток:
Вы не можете отличить значение 0 от значения без анализа.
Вы можете преобразовать строку в целочисленное значение с помощью метода разбора.
Например:
int val = Int32.parse(stringToBeParsed);
int x = Int32.parse(1234);
В C# v.7 вы можете использовать параметр inline out без объявления дополнительной переменной:
int.TryParse(TextBoxD1.Text, out int x);
Как я всегда делаю это так
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace example_string_to_int
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string a = textBox1.Text;
// this turns the text in text box 1 into a string
int b;
if (!int.TryParse(a, out b))
{
MessageBox.Show("this is not a number");
}
else
{
textBox2.Text = a+" is a number" ;
}
// then this if statment says if the string not a number display an error elce now you will have an intager.
}
}
}
Вот как я это сделаю, надеюсь, это поможет. (:
Все приведенные выше ответы хороши, но для информации мы можем использовать int.TryParse
что безопасно для преобразования строки в int, например
// TryParse returns true if the conversion succeeded
// and stores the result in j.
int j;
if (Int32.TryParse("-105", out j))
Console.WriteLine(j);
else
Console.WriteLine("String could not be parsed.");
// Output: -105
TryParse никогда не генерирует исключение - даже при недопустимом вводе и значении null. В целом, в большинстве программных контекстов предпочтительнее int.Parse.
Источник: как преобразовать строку в int в C#? (С разницей между Int.Parse и Int.TryParse)
Вот версия выполнения этого с помощью метода расширения, который также имеет возможность установить значение по умолчанию, если преобразование не удается. Фактически, это то, что я использовал для преобразования строкового ввода в любой конвертируемый тип:
using System;
using System.ComponentModel;
public static class StringExtensions
{
public static TOutput AsOrDefault<TOutput>(this string input, TOutput defaultValue = default)
where TOutput : IConvertible
{
TOutput output = defaultValue;
try
{
var converter = TypeDescriptor.GetConverter(typeof(TOutput));
if (converter != null)
{
output = (TOutput)converter.ConvertFromString(input);
}
}
catch { }
return output;
}
}
Для моего использования я ограничил вывод одним из конвертируемых типов: https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible?view=net-5.0 . Мне не нужна сумасшедшая логика, например, для преобразования строки в класс.
Чтобы использовать его для преобразования строки в int:
using FluentAssertions;
using Xunit;
[Theory]
[InlineData("0", 0)]
[InlineData("1", 1)]
[InlineData("123", 123)]
[InlineData("-123", -123)]
public void ValidStringWithNoDefaultValue_ReturnsExpectedResult(string input, int expectedResult)
{
var result = input.AsOrDefault<int>();
result.Should().Be(expectedResult);
}
[Theory]
[InlineData("0", 999, 0)]
[InlineData("1", 999, 1)]
[InlineData("123", 999, 123)]
[InlineData("-123", -999, -123)]
public void ValidStringWithDefaultValue_ReturnsExpectedResult(string input, int defaultValue, int expectedResult)
{
var result = input.AsOrDefault(defaultValue);
result.Should().Be(expectedResult);
}
[Theory]
[InlineData("")]
[InlineData(" ")]
[InlineData("abc")]
public void InvalidStringWithNoDefaultValue_ReturnsIntegerDefault(string input)
{
var result = input.AsOrDefault<int>();
result.Should().Be(default(int));
}
[Theory]
[InlineData("", 0)]
[InlineData(" ", 1)]
[InlineData("abc", 234)]
public void InvalidStringWithDefaultValue_ReturnsDefaultValue(string input, int defaultValue)
{
var result = input.AsOrDefault(defaultValue);
result.Should().Be(defaultValue);
}
Если вы ищете длинный путь, просто создайте свой единственный метод:
static int convertToInt(string a)
{
int x = 0;
Char[] charArray = a.ToCharArray();
int j = charArray.Length;
for (int i = 0; i < charArray.Length; i++)
{
j--;
int s = (int)Math.Pow(10, j);
x += ((int)Char.GetNumericValue(charArray[i]) * s);
}
return x;
}
Самый простой способ - использовать помощник по расширению:
public static class StrExtensions
{
public static int ToInt(this string s, int defVal = 0) => int.TryParse(s, out var v) ? v : defVal;
public static int? ToNullableInt(this string s, int? defVal = null) => int.TryParse(s, out var v) ? v : defVal;
}
Использование так просто:
var x = "123".ToInt(); // 123
var y = "abc".ToInt(); // 0
string t = null;
var z = t.ToInt(-1); // -1
var w = "abc".ToNullableInt(); // null
Это работает для меня:
using System;
namespace numberConvert
{
class Program
{
static void Main(string[] args)
{
string numberAsString = "8";
int numberAsInt = int.Parse(numberAsString);
}
}
}