当返回值可能被取消分配时,为什么要编译它

本文关键字:为什么 编译 分配 返回值 取消 | 更新日期: 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将捕获代码中的所有(可能捕获的)异常。