【问题标题】:Try/catch blocks inside constructors构造函数中的 try/catch 块
【发布时间】:2010-02-18 03:30:13
【问题描述】:

在构造函数中包含 try/catch 块是一种不好的编程习惯吗?还是只要我们的程序优雅地处理 typeinitializer 异常就没有区别。

在 C# 中,如果构造函数内有任何异常,框架总是会抛出 typeinitilizer 异常。

谢谢, 沙米卡

【问题讨论】:

    标签: c# constructor exception typeinitializer


    【解决方案1】:

    System.TypeInitializationExceptionstatic 构造函数抛出异常时抛出,而不是在实例构造函数上。在实例构造函数中通常会抛出异常。

    除此之外,它没有任何“错误”,就像其他任何地方一样;处理您可以正确恢复的异常,并允许那些您不能冒泡的异常。

    【讨论】:

    • 感谢 System.TypeInitializationException 的解释,是的,就我而言,它确实是一个静态构造函数。
    • @Shamika:尽管如此,同样的答案也适用;如果您可以从异常中恢复,则捕获它。如果你不能,那就不要。另请注意,在静态成员初始化中遇到的异常无法被捕获(它们会抛出TypeInitializationException)。
    • 问题,在对构造函数的调用周围还是在构造函数内部使用 try catch 更好?
    • @JohnDemetriou 与一般的异常一样,您应该只在可以处理异常时捕获异常(除非您重新抛出)。如果您的构造函数可以完成并在发生该异常时为您提供有效对象,那么您应该在构造函数中使用 try-catch。如果没有,除非你重新扔掉,否则不要把它放在那里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    相关资源
    最近更新 更多