سؤال

انا املك TextBoxD1.Text وأريد تحويله إلى int لتخزينها في قاعدة بيانات.

كيف يمكنني أن أفعل هذا؟

هل كانت مفيدة؟

المحلول

وجرب هذا:

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 في حال   أن الصورة غير صالح ولا يمكن أن يكون   تحليل بنجاح. - MSDN

نصائح أخرى

Convert.ToInt32( TextBoxD1.Text );

استخدم هذا إذا كنت على ثقة من أن محتويات مربع النص هو الباحث صالح. وثمة خيار أكثر أمانا هو

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

والفرق بين الاثنين هو أن أول واحد سوف بطرح استثناء إذا كان لا يمكن تحويل قيمة في مربع النص الخاص بك، في حين أن الثاني أن مجرد عودة كاذبة.

وتحتاج إلى تحليل سلسلة، وتحتاج أيضا إلى ضمان أن يكون حقا في شكل صحيح.

وأسهل طريقة هي هذه:

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 أسلوب (سلسلة، 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، وتحديدا <لأ href = "https://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo(v=vs.110).aspx" يختلط = "noreferrer"> NumberFormatInfo على MSDN.

ويكون متأن عند استخدام 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

يمكنك كتابة طريقة التمديد الخاصة بك

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

وكما هو موضح في 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 i = Convert.ToInt32(TextBoxD1.Text);

أو

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

ويمكن أن يتم تحويل string إلى int ل: int، Int32، Int64 وأنواع البيانات الأخرى التي تعكس أنواع البيانات عدد صحيح في. NET

وفيما يلي مثال يوضح هذا التحويل:

وهذا المعرض (لمزيد من المعلومات) عنصر محول البيانات تهيئة لكثافة العمليات القيمة. والشيء نفسه يمكن القيام به مباشرة مثل،

int xxiiqVal = Int32.Parse(strNabcd);

والسابقين.

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

لينك لرؤية هذا العرض .

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

وهذا من شأنه أن يفعل

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

وأو يمكنك استخدام

int xi=Int32.Parse(x);

وارجع <لأ href = "https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/how-to-convert-a-string-to-a-number" يختلط = "نوفولو noreferrer"> شبكة مطوري Microsoft لمزيد من المعلومات

ويمكنك تحويل سلسلة إلى int في C # باستخدام:

وظائف من الدرجة تحويل أي Convert.ToInt16()، Convert.ToInt32()، Convert.ToInt64() أو باستخدام Parse وTryParse وظائف. يتم إعطاء أمثلة هنا .

يمكنك أيضًا استخدام طريقة التمديد, ، لذلك سيكون أكثر قابلية للقراءة (على الرغم من أن الجميع معتاد بالفعل على وظائف التحليل العادية).

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

لجعله أكثر ديناميكية، حتى تتمكن من تحليله أيضًا لمضاعفة أو تعويم وما إلى ذلك، يمكنك إنشاء امتداد عام.

ويمكنك القيام به مثل أدناه دون 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 ;
}
int i = Convert.ToInt32(TextBoxD1.Text);

والطريقة أنا دائما قيام بذلك هي من هذا القبيل

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 val = Int32.parse(stringToBeParsed);
int x = Int32.parse(1234);

ويمكنك أن تجرب هذا، وأنها ستعمل:

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

وسيتم تحويل قيمة السلسلة في TextBoxD1.Text متغير في Int32 وسيتم تخزينها في العاشر.

إذا كنت تبحث عن الطريق الطويل، مجرد خلق من طريقة واحدة:

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

وأسلوب 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");
}

وهذا الرمز يعمل بالنسبة لي في Visual Studio 2010:

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

وهذا قد تساعدك؛ 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.");
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top