【问题标题】:Why do some .NET BCL methods not throw exceptions?为什么某些 .NET BCL 方法不会引发异常?
【发布时间】:2013-09-21 15:23:34
【问题描述】:

例如,BitConverter.GetBytes Method (Int64)XmlUrlResolver Constructor 都没有记录为抛出异常。他们是否通过使用返回值来指示错误?

【问题讨论】:

    标签: c# .net exception base-class-library


    【解决方案1】:

    如果它们的逻辑不能引起任何错误,则方法不需要抛出异常。这在BitConverter.GetBytes 的情况下很明显;对于任何Int64 值,都保证转换成功。

    any 方法可能会抛出一些灾难性异常,例如OutOfMemoryExceptionStackOverflowException

    【讨论】:

    • 你的意思是OutOfMemoryException
    • 至于XmlUrlResolver 构造函数,我刚刚在.NET 参考源中检查了它,下面是该构造函数的实现方式:public XmlUrlResolver() { }。失败的方法并不多。
    • 如果传入的值不是 Int64 怎么办?或者你不能这样做,因为你会在编译时被警告?如果是这样,由于编译时检查,不需要异常。如果直到运行时才能确定类型怎么办?不应该抛出和捕获异常吗?
    • 编译器确保您只能将int64 传递给GetBytes 方法。如果您以某种方式设法编译它(例如,通过手动编辑 IL),那么 CLR 本身将抛出一个 InvalidProgramException,与 OOMSOE 在同一类中
    猜你喜欢
    • 2018-09-13
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多