处理FormatException是未处理的错误

时间:2014-10-01 14:59:08

标签: c# regex

目前,我有一个输入文本框和输出标签。现在,我正在研究算术运算符。我想处理数字而不管它们的运算符。(例如,加法,减法,乘法和除法)。示例:如果我在文本框中键入2 * 3,答案将显示在标签中。

我使用包含正则表达式拆分;但是,它不起作用。它给出了一个错误

  

FormatException未处理,输入字符串格式不正确。

这是我的代码:

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

      private void button1_Click(object sender, EventArgs e)
      {
         int num = Convert.ToInt32(textBox1.Text);//error here
         string s = textBox1.Text;
         string seps = @"(\t)|(\n)|(\+)|(-)|(\*)|(/)|(\()|(\))";
         string[] tokens = System.Text.RegularExpressions.Regex.Split(s, seps);

         foreach (string token in tokens)
            label.Text = token;

         if (textBox1.Text.Contains("*")==true)
         {
            int num2 = num * num;
            label.Text = Convert.ToString(num2);
         }
      }

      public void CalcLexer(String str)
      {
         // Regex.Split(str, @"(?=[-+*/])|(?<=[-+*/])");
      }
   }
}

有人可以帮我解决这个问题吗?非常感谢你的推荐。

1 个答案:

答案 0 :(得分:0)

您正在尝试使用仍在其中的运算符转换字符串:

int num = Convert.ToInt32(textBox1.Text);//error here

此时你仍然有公式(2 * 3),而不是单个数字(2)。您需要在分割字符串后转换数字并确认“令牌”是数字而不是运算符。

请注意,如果给定的文本不是数字,则Convert.ToInt32旨在引发异常。如果您希望它容忍运算符而不抛出异常,则可以使用Int32.TryParse