我有两段代码。会说什么是最佳实践?为什么? 在第一个版本中,我添加了一个新商店并评估它是否成功使用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;
}
答案 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;
}