异常与 if 语句

Exception vs. if statements

我有2段代码。什么是最佳实践,为什么? 在第一个版本中,我添加了一个新商店并使用异常评估它是否成功,而在第二个版本中,我对 "if" 语句进行了相同的操作。

我最近读到代码中的异常可能很昂贵,如果所有 "Add" 方法都以这种方式实现,它可能会导致性能问题。 有人可以证实这一点吗?

谢谢!!!

public bool AddShop1(Shop newShop)
        {
            try
            {
                ShopDictionary.Add(newShop.ShopId, newShop);
                return true;
            }

            catch (ArgumentNullException)
            {
                return false;
            }

            catch (ArgumentException)
            {
                return false;
            }

        }

public bool AddShop2(Shop newShop)
        {
            if (newShop == null || ShopDictionary.ContainsKey(newShop.ShopId))
            {
                return false;
            }

            ShopDictionary.Add(newShop.ShopId, newShop);
            return true;
        }

好吧,为了您的应用程序的性能,避免异常更为可取。如果你真的对异常感兴趣,你可以这样做,

public bool AddShop2(Shop newShop, out Exception exception)
    {
        exception = null;
        try
        {
            if (newShop == null || ShopDictionary.ContainsKey(newShop.ShopId))
            {
                return false;
            }

            ShopDictionary.Add(newShop.ShopId, newShop);
        }
        catch (Exception ex)
        {
            exception = ex;
        }
        return true;
    }

您不应将 try catch 用于控制流逻辑。

应该使用 if 或 switches 等来完成

try catch 应该只用于不确定的情况,然后应该相应地处理。

这取决于您的函数导致异常的频率。如果异常很少发生(每 1000 次调用一次),那么您可以忽略性能下降。但是如果从 1000 次执行中你会得到 800 次异常,那么一定要转换为 ifs。但只是一个问题,如果从 1000 中你有 800 个异常,它真的是异常,还是业务逻辑规则?