我尝试了很多重新抛出异常并得出以下结论:
1)如果我们想提供更多关于异常的细节,比如(内部异常),我们可能想重新抛出
2)我们可能会重新抛出以完全终止程序..
3)如果我们想重新抛出并且不想终止程序,那么我将不得不在循环中处理重新抛出的异常......
我在执行此操作时尝试了以下操作:
public void input()
{
char opt;
int id;
int qty;
int ind = -1;
do
{
Console.WriteLine("Add item to cart: ");
opt = Convert.ToChar(Console.ReadLine());
if (opt == 'n' || opt == 'N')
break;
else
{
cashier.showProductList();
Console.WriteLine("Enter Product ID from above list: ");
id = Convert.ToInt32(Console.ReadLine());
foreach (Products item in cashier.ProductList)
{
if (id == item.ProductID)
{
BoughtItems.Add(item);
ind = Cashier.ProductList.IndexOf(item);
}
}
Console.WriteLine("Enter The quantity required: ");
qty = Convert.ToInt32(Console.ReadLine());
try
{
if (qty < 0)
{
throw new BuisnessException("Qty can not be -ve...", new Exception("enter a valid +ve amount"));
}
else if (qty < cashier.ProductList[ind].Quantity)
{
BoughtItems[BoughtItems.Count - 1].Quantity = qty;
TotalPrice = TotalPrice + (BoughtItems[BoughtItems.Count - 1].Quantity * BoughtItems[BoughtItems.Count - 1].price);
}
else if (qty >= cashier.ProductList[ind].Quantity)
{
throw new QuantityExceedingStockException("Item not in sufficient amount", new Exception("Enter quantity less than" + Cashier.ProductList[ind].Quantity));
}
}
catch (BuisnessException ex)
{
BoughtItems.RemoveAt(BoughtItems.Count - 1);
Console.WriteLine(ex.Message);
throw;
//throw; //Re throwing terminating the i/p loop if re thrown exception not handled in loop! :/
}
catch (QuantityExceedingStockException ex)
{
BoughtItems.RemoveAt(BoughtItems.Count - 1);
Console.WriteLine(ex.Message);
throw;
}
}
} while (true);
}
public void showCartItems()
{
foreach (Products item in _boughtItems)
{
Console.WriteLine(item.ProductID + " " + item.name + " " + item.price + " " + item.Quantity);
}
}
然后在 main() 中:
do
{
try
{
cashier1.Customr.input();
}
catch (BuisnessException ex)
{
//Console.WriteLine(ex.Message);
Console.WriteLine(ex.InnerException.Message);
}
catch (QuantityExceedingStockException ex)
{
Console.WriteLine(ex.InnerException.Message);
}
//catch
//{
// Console.WriteLine("Press y below to continue shopping");
//}
Console.Write("Continue Shopping ?");
opt = Convert.ToChar(Console.ReadLine());
if (opt == 'n')
break;
else
continue;
} while (true);
Console.WriteLine("Total Price is: " + cashier1.Customr.TotalPrice);
如果我不处理循环中重新抛出的异常,我的程序将终止......那么这是否意味着我提出的以上三个关于重新抛出异常的结论是正确的?