- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Jeffry Richter 说(在 CLR via C# Edition 4, P.534)实现 IDisposable
的类中的所有方法和属性都应该抛出 ObjectDisposedException
明确地。
这是有道理的,但我从未真正看到它在野外完成。
这个建议是因为开发人员不知道(或不关心)而没有被遵循,还是比这更复杂?
最佳答案
当您的类型的成员由于其依赖的资源被处置而无法运行时,您可以显式抛出它。
在许多情况下,您的类型可能会包装一个 IDisposable 实例。在这种情况下,您可以简单地调用包装的 IDisposable 实例的成员,并让它负责抛出 ObjectDisposedException
。
但有些情况下您可能想显式抛出它。例如,如果您的 Dispose 方法将包装的 IDisposable 实例设置为 null,您将需要显式抛出执行,因为您不再有实例可以委托(delegate)给它。
或者,如果您的 IDisposable 类直接拥有一个非托管资源,它需要在非托管资源已被释放时显式抛出 ObjectDisposedException。
最后,在调用包装的 IDisposable 成员之前执行重要逻辑的成员可能希望“快速失败”,并抛出 ObjectDisposedException 而不是不必要地执行此类逻辑。
如果不依赖包装的 IDisposable 实例或非托管资源的成员不需要抛出 ObjectDisposedException 更合适的话。
我认为 Jeffrey Richter 关于 IDisposable 类的所有 成员在处置时应该抛出的建议没有道理。 IDisposable 类框架中有大量示例,这些示例具有在处置时不抛出的成员。例如
FileStream.Name
将返回传递给 FileStream 的构造函数的名称,即使 FileStream 已被释放,因为它不需要访问流来返回名称。
System.Windows.Form 在被释放后将允许访问许多成员。因此,如果您以模态方式显示对话框并处理表单,您仍然可以访问在表单中输入的用户输入。
关于.net - 我应该什么时候抛出 `ObjectDisposedException` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50003609/
Jeffry Richter 说(在 CLR via C# Edition 4, P.534)实现 IDisposable 的类中的所有方法和属性都应该抛出 ObjectDisposedExcepti
我收到以下错误: System.ObjectDisposedException: The ObjectContext instance has been disposed and can no lon
static void Main(string[] args) { Observable.Using(() => new EventLoopScheduler(), els => Observ
我正在使用 Entity Framework 6.x,一个实体看起来像这样(有些简化): public partial class Record { public int Id { get;
我需要在我的面板中添加一个Image,所以我使用以下代码: var image = new Image(); var source = new BitmapImage(); source.BeginI
由于windows phone不能处理gif,所以写了一点方法,但是好像有点错误。 下面的代码在运行到 (JPG 和 PNG 部分)bitimg.SetSource(e.Result) 时总是抛出异常
我在尝试创建用户时遇到错误。我在下面的代码中的 第 15 行 得到了它。 1 public async void AddOrganisationAdmin() 2 { 3 4
我得到了一个有点复杂的 .net 控制台应用程序,它使用 WPF 作为一些通知窗口,也进行一些 http 调用。在极少数情况下,该应用程序会崩溃,而我能够获得的唯一错误消息来自 Windows 事件查
我遇到了一个问题,其中大约有 50% 的时间抛出了 ObjectDisposedException。 try 中的代码(在 finally 中)导致了异常。我不确定如何处理。我可以吃掉异常,如下所示,
当实现 Dispose 模式时,对象的属性应该在对象被释放后抛出 ObjectDisposedException。 如果每个属性和方法在 setter 和 getter 的开头都有一行代码来抛出该异常
我发现有很多关于此问题的条目,但是没有解决方案对我有用。 简而言之,我有一个要在Docker中运行的.net Core 3.1控制台应用程序。如果我在Visual Studio中或通过命令行启动应用程
这是我的代码,不言自明。 using block 终止后 - output 变量被释放。为什么?我想从函数中返回它,处置 StreamWriter 但返回我的对象的正确方法是什么? public
我的应用程序通常在 10-20 个线程上运行,这些线程几乎每秒都会向 GUI 发送事件以更新某些控件。 当用户关闭这些应用程序中间时,与这些事件相关的所有更新都会导致几次随机崩溃。主要是 Object
下面两行代码一行一行执行: this.dataWriter.WriteBytes(message.MessageBuffer); await this.dataWriter.StoreAsync();
有没有办法验证一个 Session 是否已经被 NHibernate 处理掉了? 我在 Session 上有一个包装类,它有自己的 Finalizer 和 IDispoable 实现,但是如果在我自己
我有一个使用 Windows 身份验证和 Elmah 日志记录在 IIS 7 上运行的 MVC 应用程序。 通常当错误发生时,我们会调用类似“logger.LogError”的东西,它是一个包装器:
我有以下 EF 代码优先代码。它工作正常。但是当我查找“club2.Members”的值时,它显示如下: 'club2.Members' threw an exception of type 'Sys
你好,我正在编写一个 ASP.Net MVC 应用程序,我有一个专门用于数据库连接的特殊类。在我的 HomeController 中,我调用这个特殊 DB 类的静态方法,它将所需的数据返回到对象中。我
我有这个类,我经常(但不总是)在使用方法 ExecuteQuery 时得到 NullReferenceException 或 ObjectDisposedException: public class
我正在调试和增强 C#/XAML 程序,该程序在运行时反复生成异常,我可以在“输出”窗口中看到该异常。 System.dll 中发生类型为“System.ObjectDisposedException
我是一名优秀的程序员,十分优秀!