异常与if语句

时间:2015-01-27 12:00:00

标签: c# performance exception if-statement null

我有两段代码。会说什么是最佳实践?为什么? 在第一个版本中,我添加了一个新商店并评估它是否成功使用Exceptions,而在第二个版本中我使用“if”语句执行相同操作。

我最近读到代码中的异常代价很高,如果以这种方式实现所有“添加”方法,则可能会导致性能问题。 任何人都可以证实这一点吗?

感谢!!!

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;
        }

3 个答案:

答案 0 :(得分:1)

你不应该使用try catch作为控制流逻辑。

应该使用if或switch等来完成。

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

答案 1 :(得分:0)

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

答案 2 :(得分:-2)

嗯,对于应用程序的性能,更优选避免异常。如果你真的对异常感兴趣,你可以这样做,

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;
    }