异常与 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 个异常,它真的是异常,还是业务逻辑规则?
我有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 个异常,它真的是异常,还是业务逻辑规则?