当返回值可能被取消分配时,为什么要编译它
本文关键字:为什么 编译 分配 返回值 取消 | 更新日期: 2024-07-23 07:23:43
在我看来,这个代码:
public static bool InsertInventoryItem(DuckbillUtils.InventoryItem invItem)
{
bool addSuccess = true;
try
{
InventoryItemsList invItems = new InventoryItemsList();
invItems.inventoryItems.Add(invItem);
}
catch (Exception)
{
addSuccess = false;
}
return addSuccess;
}
不应该编译,因为不能保证会到达返回行-如果出现异常,addSuccess会被分配给,但方法不会从catch块中返回,并且不会到达最后一行,在这种情况下,方法不会返回任何内容?
代码将catch
(所有)异常,将addSuccess
设置为false,然后继续返回行。如果没有抛出异常,则返回行将返回true。并且addSuccess
在第一行被分配了一个值,它永远不会被取消分配。
返回总是会被命中。你正在接受错误。
如果抛出异常,则不会命中返回。即便如此,这也是意料之中的行为。
public static bool InsertInventoryItem(DuckbillUtils.InventoryItem invItem)
{
bool addSuccess = true;
try
{
InventoryItemsList invItems = new InventoryItemsList();
invItems.inventoryItems.Add(invItem);
}
catch (Exception)
{
throw;
}
return addSuccess;
}
因为无法保证返回线路会到达
在提供的代码中,它看起来不是这样的。
try/catch
将捕获代码中的所有(可能捕获的)异常。