Как я могу конвертировать 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.TryParse()

Он не выдаст, если текст не числовой.

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 x = Int32.TryParse(TextBoxD1.Text, out x)?x:0;

Наслаждайся этим...

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);
    }
}

И тогда вы можете назвать это так:

  1. Если вы уверены, что ваша строка является целым числом, например, "50".

    int num = TextBoxD1.Text.ParseToInt32();
    
  2. Если вы не уверены и хотите предотвратить сбои.

    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;
}
int i = Convert.ToInt32(TextBoxD1.Text);

Вы можете сделать как ниже без 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);
        }
    }
}
Другие вопросы по тегам