2009-06-19 6 views

ответ

635

Попробуйте это:

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 подобен методе Анализировать , за исключением методы TryParse не бросает исключение, если преобразования выходит из строя. Это устраняет необходимость использования обработчика исключений для проверки для исключения FormatException в случае , что s недействителен и не может быть успешно проанализирован. - MSDN

+2

Что делать, если целое число 64 бит или выглядит как «aslkdlksadjsd»? Это все еще в безопасности? – Jonny

+5

@Jonny 'Int64.Parse()'. Если вход не является int, вы получите трассировку execple и стека с 'Int64.Parse' или логическое' False' с 'Int64.TryParse()', поэтому вам понадобится инструкция if, например 'if (Int32.TryParse (TextBoxD1.Text, out x)) {}'. – 2015-08-15 11:27:40

+14

@Jonny: Я никогда не видел целое число, похожее на «aslkdlksadjsd» ... – Roberto

32
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(..); 
} 
23
int.TryParse() 

Он не бросит, если текст не является числовым значением.

+0

Это лучше, чем два других. Возможно, пользовательский ввод будет неправильным. Это более эффективно, чем использование обработки исключений, как это требуют другие. – UncleO

+0

Точно. Он возвращает false, если преобразование завершилось неудачно. – n8wrl

13

Вам нужно разобрать строку, и вам также необходимо убедиться, что она действительно в формате целого.

Самый простой способ заключается в следующем:

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 
} 
12
int myInt = int.Parse(TextBoxD1.Text) 

Другой способ:

bool isConvertible = false; 
int myInt = 0; 

isConvertible = int.TryParse(TextBoxD1.Text, out myInt); 

Разница между ними состоит в том, что первый один будет сгенерировано исключение, если значение ваше текстовое поле не может быть преобразовано, а второе - только false.

+0

Вышеупомянутая логическая переменная очень полезна, мы используем преобразованное значение для comaprison, допустим, в условии if. 'code' int NumericJL; bool isNum = int.TryParse (nomeeJobBand, out NumericJL); если (isNum) // The The retured JL способен pasred к Int затем идти вперед по сравнению { если (! (NumericJL> = 6)) { // Номинировать } // еще {}} – baymax

5

Как объяснено в TryParse documentation, 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 
} 
8
int x = 0; 
int.TryParse(TextBoxD1.Text, out x); 

Оператор TryParse возвращает логическое значение, представляющее ли синтаксический анализ успешно или нет. Если это удалось, анализируемое значение сохраняется во втором параметре.

Для получения более подробной информации см. Int32.TryParse Method (String, Int32).

2

Вы также можете использовать extension method, так что это будет более удобным для чтения (хотя все уже привыкли к регулярным функциям 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. 
    } 
    

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

6

Наслаждайтесь ...

int i = 0; 
string s = "123"; 
i =int.Parse(s); 
i = Convert.ToInt32(s); 
0

Вы можете попробовать это, он будет работать:

int x = Convert.ToInt32(TextBoxD1.Text); 

Значение строки в переменной TextBoxD1.Text будут преобразованы в Int32 и будет храниться в x.

5

Хотя здесь уже много решений, описывающих int.Parse, во всех ответах есть что-то важное. Как правило, строковые представления числовых значений различаются по культуре. Элементы числовых строк, таких как символы валюты, разделители групп (или тысяч) и десятичные разделители, различаются по культуре.

Если вы хотите создать надежный способ синтаксического анализа целой строки, важно учитывать информацию о культуре. Если вы этого не сделаете, будет использоваться current culture settings. Это может дать пользователю довольно неприятный сюрприз - или, что еще хуже, если вы разбираете форматы файлов. Если вы просто хотите, английский парсинг, то лучше просто сделать его явным, указав параметры культуры для использования:

var culture = CultureInfo.GetCulture("en-US"); 
int result = 0; 
if (int.TryParse(myString, NumberStyles.Integer, culture, out result)) 
{ 
    // use result... 
} 

Для получения более подробной информации читайте на CultureInfo, в частности NumberFormatInfo на MSDN.

3

Вы можете использовать либо,

int i = Convert.ToInt32(TextBoxD1.Text); 

или

int i =int.Parse(TextBoxD1.Text); 
1

Будьте осторожны при использовании Convert.ToInt32() на гольца! Он вернет код ASCII! Если вам может понадобиться извлечь только определенную позицию внутри строки.

String input = "123678"; 

int x = Convert.ToInt32(input[4]); // returns 55 

int x = Convert.ToInt32(input[4].toString()); // returns 7 
4

Вы можете написать свой собственный метод extesion

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(); 
+0

Что такое 'int defaultValue = 0' for? где вы используете эту переменную? – Benj

+0

@Benj Похоже на опечатку, я думаю, что она должна быть установлена, если 'TryParse' не работает – TheLethalCoder

+0

@Benj Я исправил пример –

1

путь я всегда делаю это, как этот

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. 
     } 
    } 
} 

это, как я хотел бы сделать это, я надеюсь, что это помогает. (:

2

Преобразование string к int может быть сделано для: int, Int32, Int64 и других типов данных, отражающих типов целочисленных данных в .NET

Ниже пример показывает, что это преобразование:

Это шоу (для Информация) адаптер данных элемент инициализируется в целое значение. То же самое можно сделать непосредственно, как,

int xxiiqVal = Int32.Parse(strNabcd); 

Ex.

string strNii = ""; 
UsrDataAdapter.SelectCommand.Parameters["@Nii"].Value = Int32.Parse(strNii); 

Link to see this demo.

-3

это может помочь вам; D

{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     float Stukprijs; 
     float Aantal; 
     private void label2_Click(object sender, EventArgs e) 
     { 

     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show("In de eersre textbox staat een geldbedrag." + Environment.NewLine + "In de tweede textbox staat een aantal." + Environment.NewLine + "Bereken wat er moetworden betaald." + Environment.NewLine + "Je krijgt 15% korting over het bedrag BOVEN de 100." + Environment.NewLine + "Als de korting meer dan 10 euri is," + Environment.NewLine + "wordt de korting textbox lichtgroen"); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      errorProvider1.Clear(); 
      errorProvider2.Clear(); 
      if (float.TryParse(textBox1.Text, out Stukprijs)) 
      { 
       if (float.TryParse(textBox2.Text, out Aantal)) 
       { 
        float Totaal = Stukprijs * Aantal; 
        string Output = Totaal.ToString(); 
        textBox3.Text = Output; 
        if (Totaal >= 100) 
        { 
         float korting = Totaal - 100; 
         float korting2 = korting/100 * 15; 
         string Output2 = korting2.ToString(); 
         textBox4.Text = Output2; 
         if (korting2 >= 10) 
         { 
          textBox4.BackColor = Color.LightGreen; 
         } 
         else 
         { 
          textBox4.BackColor = SystemColors.Control; 
         } 
        } 
        else 
        { 
         textBox4.Text = "0"; 
         textBox4.BackColor = SystemColors.Control; 
        } 
       } 
       else 
       { 
        errorProvider2.SetError(textBox2, "Aantal plz!"); 
       } 

      } 
      else 
      { 
       errorProvider1.SetError(textBox1, "Bedrag plz!"); 
       if (float.TryParse(textBox2.Text, out Aantal)) 
       { 

       } 
       else 
       { 
        errorProvider2.SetError(textBox2, "Aantal plz!"); 
       } 
      } 

     } 

     private void BTNwissel_Click(object sender, EventArgs e) 
     { 
      //LL, LU, LR, LD. 
      Color c = LL.BackColor; 
      LL.BackColor = LU.BackColor; 
      LU.BackColor = LR.BackColor; 
      LR.BackColor = LD.BackColor; 
      LD.BackColor = c; 
     } 

     private void button3_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show("zorg dat de kleuren linksom wisselen als je op de knop drukt."); 
     } 
    } 
} 
2
//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; 
} 
+0

По умолчанию в этом случае было бы неплохо. Если вообще требуется дефолт, я рекомендую вернуться 0. –

1
int x = Int32.TryParse(TextBoxD1.Text, out x)?x:0; 
0

Если вы ищете долгий путь, просто создать один метод:

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

вы можете сделать, как показано ниже, не 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 - 1)); 
      }    
     } 
    return x ; 
} 
0

МЕТОД 1

int TheAnswer1 = 0; 
bool Success = Int32.TryParse("42", out TheAnswer1); 
if (!Success) { 
    Console.WriteLine("String not Convertable to an Integer"); 
} 

МЕТОД 2

int TheAnswer2 = 0; 
try { 
    TheAnswer2 = Int32.Parse("42"); 
} 
catch { 
    Console.WriteLine("String not Convertable to an Integer"); 
} 

МЕТОД 3

int TheAnswer3 = 0; 
try { 
    TheAnswer3 = Int32.Parse("42"); 
} 
catch (FormatException) { 
    Console.WriteLine("String not in the correct format for an Integer"); 
} 
catch (ArgumentNullException) { 
    Console.WriteLine("String is null"); 
} 
catch (OverflowException) { 
    Console.WriteLine("String represents a number less than" 
         + "MinValue or greater than MaxValue"); 
} 
0

Этот код работает для меня в Visual Studio 2010:

int someValue = Convert.ToInt32(TextBoxD1.Text); 

 Смежные вопросы

  • Нет связанных вопросов^_^