从文本框取数字,如果文本框为空,就令其为零,如何处理最简洁经典呢?我现在的做法,是用异常处理的,这样好像代码最少,但是据说,异常,能不用就不用,是这样吗?
如果不用异常,用什么方法最好呢?
            try
            {
                dbljhzl = Decimal.Parse(txtjhyz.Text);
            }
            catch
            {
                dbljhzl=0;
            }

解决方案 »

  1.   

     
    if (string.IsNullOrEmpty(txtjhyz.Text))
                    {
    dbljhzl=0;
                  }
                    else
                    {
    dbljhzl=Decimal.Parse(txtjhyz.Text);                 }
       
      

  2.   

    try
    {
       dbljhzl = Decimal.Parse(txtjhyz.Text);
    }
    catch
    {
       dbljhzl=0;
    }if (string.IsNullOrEmpty(txtjhyz.Text))
    {
    dbljhzl=0;
    }
    else
    {
    dbljhzl=Decimal.Parse(txtjhyz.Text);
    }再问,以上两种方法,哪种效率高些呢?
    另外,是不是“异常处理”能不用就不用呢?
      

  3.   

    先添加TextBox的KeyPress事件,为了控制TextBox只能输入数字、小数点与退格符,添加以下代码 :
                switch (e.KeyChar)
                {
                    case (Char)ConsoleKey.D0:
                    case (Char)ConsoleKey.D1:
                    case (Char)ConsoleKey.D2:
                    case (Char)ConsoleKey.D3:
                    case (Char)ConsoleKey.D4:
                    case (Char)ConsoleKey.D5:
                    case (Char)ConsoleKey.D6:
                    case (Char)ConsoleKey.D7:
                    case (Char)ConsoleKey.D8:
                    case (Char)ConsoleKey.D9:
                    case (Char)ConsoleKey.Decimal:
                    case (Char)ConsoleKey.Backspace:
                        e.Handled = false;
                        break;
                    default:
                        e.Handled = true;
                        break;
                }
                base.OnKeyPress(e);读取的时候,如下写即可:
    dbljhzl =string.IsNullorEmpty(txtjhyz.Text)?0: Decimal.Parse(txtjhyz.Text);
      

  4.   

    if(!string.IsNullorEmpty(txtjhyz.Text))
    {
    int intPort=0;
    if(!int.TryParse(txtPort.Text, out intPort))
    {
       return "请输入数字";
    }
    else
    {
    dbljhzl =Convert.ToDecimal(txtjhyz.Text);}
    }   else
    {
     dbljhzl =0;
    }
      

  5.   

    楼主说的实质问题是验证验证分为客户端,服务端效率高,客户端,无质疑,但是存在一定的漏洞,脚本不是特别安全的东西
    所以必须加服务端验证服务端分两种一种手写判断条件,但绝不能像楼主那样来做,是一种方法,但是try catch生下来不是干件事的,
    这个效率肯定是最不好的
    另一种就是验证控件,这里面asp.net自代的有很多,还可以自己定义,或是第三方的
    请楼主多多实践,也就明白其中原由
      

  6.   

    dbljhzl = 0;
    Decimal.TryParse(txtjhyz.Text, out dbljhzl);
      

  7.   

    textbox1.text==""?0:textbox1.text
     如果文本框为空赋0不是就给文本框的值
      

  8.   

    dbljhzl =string.IsNullorEmpty(txtjhyz.Text)?0: Decimal.Parse(txtjhyz.Text);
      

  9.   

    首先有没有限制输入,像5楼所说控制输入;
    再者是WebForm还是WinForm,webform可用javascript和校验控件和后台代码检验;
    如果没有限制,全在这处理,就要验证文本框是不是数字,可以调用vb库的isnumeric函数或者用正则表达式
    来做,这是最精简的了。取控件值就用异常处理不是好的构架。
      

  10.   

    用string.IsNullOrEmpty(TextBox1.Text)语句比较好点
      

  11.   

    dbljhzl = 0;
    Decimal.TryParse(txtjhyz.Text, out dbljhzl);
      

  12.   

    微软都建议用 TryParse 取代 Parse
      

  13.   

    到网上查查,C#唯一的三元运算符,合理的运用C#提供的现有功能,比写if,else来的更简单。
      

  14.   

    TxtValues =string.IsNullorEmpty(TextBox1.Text.Trim())?0: Decimal.Parse(TextBox1.Text.Trim());