初学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块嵌套的写法么?
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块嵌套的写法么?
解决方案 »
- .net项目中上传图片预览效果问题
- 一个简单的正则 20分送上。
- 为什么txt没有打开?
- Excel導入dataset 當Excel單元格裡字符超過大約255個時``後面的字符就丟失了``為什么??
- 點擊DataGrid中的欄位(字段)時,怎麼讓它不進行排序操作??
- 请问大家:我把DataGrid里的内容用excel输出的时候出现乱码?(贴了代码了)
- 请教正则表达问题,取两个字符中间部分,等待
- ListView或者其它
- 探讨各种变量声明方式的利弊,100分家产求个明白!
- 快来救救小白 c#调用c++dll问题
- android和windows phone7开发,哪个更有前途?
- 未将对象引用设置到对象的实例
decimal priceDecimal=0.0;
//Declare the variables.(声明变量)
int quantityInteger;
decimal priceDecimal, extendedPriceDecimal, discountDecimal, amountDueDecimal;
上面的变量不仅仅声明一下就可以了,必须要给个初值.不然编译器就会报错。这是C#的语法要求.
根本没有走到try块那一步呢.
{
str = "1234";
Console.WriteLine();
}
static void Main(string[] args)
{
string str;
Test(out str);
Console.WriteLine(str);
Console.ReadKey();
}
编译器是正确的, 你的有可能会出现未赋值的情况..仔细想想,如果try里出了异常呢? 是不是赋值失败了?外面竟然引用了这个值!! 编译器给你个警告是正确的,也是应该的,如果不给,你的代码必然是空指针异常.