代码之家  ›  专栏  ›  技术社区  ›  Dbl

丢弃异常变量时是否存在技术差异?

  •  2
  • Dbl  · 技术社区  · 6 年前

    在我职业生涯中的某个时候,我了解到

    throw e
    

    throw;
    

    两者之间有显著的区别吗

    catch(FormatException)
    

    catch(FormatException e)
    

    还有,哪一个有显著的区别?(除了调试时没有悬停异常的选项)

    我想知道这样做是否有技术上的原因,因为昨天我在一些github repo(dnSpy)中注意到,开发人员丢弃了这个变量。我希望这个问题的答案比“不——如果你对例外情况不感兴趣的话,只需要写得更短”更令人兴奋

    Sample image

    3 回复  |  直到 6 年前
        1
  •  3
  •   Patrick Hofman Wahid Bitar    6 年前

    好吧,CLR不需要创建变量。就这样。异常已被实例化,因此没有收益。这只是一个额外变量的分配。

    CS0168:变量“e”已声明但从未使用

        2
  •  2
  •   Iridium    6 年前

    在发布模式下,编译器生成的IL没有区别(在这两种情况下都没有为异常分配局部变量)。

    在调试模式下编译时(至少对我来说,在VS2017中编译)有一点不同,在这种模式下,在 catch (SomeException e) 但不是在 catch (SomeException) 案例。

        3
  •  0
  •   Jamie Rees    6 年前

    不同的是,你可以访问 Exception 对象作为一个变量,这样你可以做不同的事情,例如,一个常见的方法是记录。

    catch (FormatException e)
    {
        _log.LogError(e);
    }
    

    注意,上面的代码会记录并吞下异常,这完全取决于您的代码的用例。