初学C#,在处理异常时遇到了一个问题。我想不用try/catch嵌套的模式,我这样写,我觉得两个try/catch单独写这样代码更好理解啊://Declare the variables.(声明变量)
            int quantityInteger;
            decimal priceDecimal, extendedPriceDecimal, discountDecimal, amountDueDecimal;            //Convert input values to numeric and assign to variables.(将输入转换成数值量并指派给变量)
            //try/catch块处理FormatExcepting异常.
            try
            {
                quantityInteger = int.Parse(quantityTextBox.Text);
            }
            catch
            {
                //Invalid quantity.(无效的数量!)
                MessageBox.Show("Invalid quantity.(无效的数量!)", "Data Error.(数据错误!)");
                quantityTextBox.Focus();
                quantityTextBox.SelectAll();
            }            try
            {
                priceDecimal = decimal.Parse(priceTextBox.Text);
            }
            catch
            {
                //Invalid price.(无效的价格!)
                MessageBox.Show("Invalid price.(无效的价格!)", "Data Error.(数据错误!)");
                priceTextBox.Focus();
                priceTextBox.SelectAll();
            }            //Calculate values.(计算)
            extendedPriceDecimal = quantityInteger * priceDecimal;但是编译器说quantityInteger和priceDecimal变量都没赋初值,难道我在try/catch块中赋的初值被编译器无视了?这样写错在哪?一定要用try/catch块嵌套的写法么?

解决方案 »

  1.   

       int quantityInteger=0;
    decimal priceDecimal=0.0;
      

  2.   

    就是让你附上初值吗,因为作用于的问题,try代码段或者for代码段等,引用局部变量,需要你赋初始值的
      

  3.   

    申明时赋上初值就可以了。try/catch块嵌套什么概念?  把所有可能异常的代码放在一个try{}中,然后根据catch到不同的exception进行处理。
      

  4.   


                //Declare the variables.(声明变量)
                int quantityInteger;
                decimal priceDecimal, extendedPriceDecimal, discountDecimal, amountDueDecimal;
    上面的变量不仅仅声明一下就可以了,必须要给个初值.不然编译器就会报错。这是C#的语法要求.
    根本没有走到try块那一步呢.
      

  5.   

    除非这样:        public static void Test(out string str)
            {
                str = "1234";
                Console.WriteLine();
            }
            static void Main(string[] args)
            {
                string str;
                Test(out str);
                Console.WriteLine(str);
                    Console.ReadKey();      
            }
      

  6.   

    强制数据转换最好不要用try catch, 而用int.tryparse, 我做过测试,对于出错情况,使用try...catch判断的时间时tryparse时间的两个数量级。可怕吧。
      

  7.   


    编译器是正确的, 你的有可能会出现未赋值的情况..仔细想想,如果try里出了异常呢? 是不是赋值失败了?外面竟然引用了这个值!! 编译器给你个警告是正确的,也是应该的,如果不给,你的代码必然是空指针异常.
      

  8.   

    用 try catch 会影响程序的性能,建议不要过多的随便使用它
      

  9.   

    谢谢你们回答我的问题,我理解了,其实在try/catch块中赋值不一定有效,所以必须在声明变量的同时给变量赋上初值,问题解决!看来给变量赋初值是个好习惯。  T  T