首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常语句与if语句

异常语句与if语句
EN

Stack Overflow用户
提问于 2015-01-27 12:00:00
回答 3查看 1.1K关注 0票数 0

我有两段代码。什么是最佳实践,为什么呢?在第一个版本中,我添加了一个新的shop并评估它是否成功(除了异常),而在第二个版本中,我对" if“语句也是这样做的。

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

谢谢!

代码语言:javascript
复制
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;
        }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-27 12:04:59

您不应该对控制流逻辑使用try catch。

应该使用if或开关等来完成。

尝试捕捉应该只用于不确定的情况,然后应该相应地处理。

票数 1
EN

Stack Overflow用户

发布于 2015-01-27 12:06:22

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

票数 0
EN

Stack Overflow用户

发布于 2015-01-27 12:03:58

对于应用程序的性能而言,避免异常是更好的选择。如果你真的对例外感兴趣,你可以这样做,

代码语言:javascript
复制
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;
    }
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28170016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档