流的通用IDisposable包装器-捕获所有异常的替代方法 - c#

因此,我刚刚针对一种类型编写了此实现,该类型可以抽象文件并在其包含的流上实现IDisposable。它打算用于任何项目:

public void Dispose()
{
  if (_contentStream == null)
    return;
  lock (_contentStreamLocker)
  {
    if (_contentStream == null)
      return;

    try
    {
      _contentStream.Dispose();
    }
    catch (Exception)
    {
      //legitimate? - don't let any exception prevent 
      //us from successfully disposing?
    }  
    _contentStream = null;
  }
}

因此,我显然很脏,因为:

我正在赶上Exception
我对Exception无所事事

但是,由于我不能保证基础流的行为(还考虑了自定义实现),即,如果该流已经被处置,或者处于实现无法处置的状态,那么我真的看不到要做什么。

显然,我不应该隐藏StreamDispose()的错误实现;但我认为这里有一个半途而废的房子。

特别是以下事实:此对象不一定“拥有”流,因此不必总是负责Dispose()。因此,应该容忍其他人处置流的时间。

显然,在大多数情况下,这将不是问题。在using块中获取文件,或者读取它,然后对其进行处理,然后对其进行处理。但是有一些极端情况。他们打扰我了!

最初,我将其写为catch(ObjectDisposedException){ }-但这只是一个非正式模式,不能依赖任何一个。

我该怎么办?尽管事实证明吞食异常是不好的业力,但还是保持这样吧?大吃一惊只ObjectDisposedException,即使不是更好吗?还是我应该根本没有吞食或处理任何异常?

在所有情况下,我都能看到优点。只是无法弄清楚哪个赢了。

参考方案

通常,如果您不知道哪一个获胜,那是因为将有一些有用的信息无法“一般”地处理。在这种情况下,我认为最好让呼叫者处理,因为他们将处于一种具体情况下,可以更好地进行判断。

如何将流引入此类?如果您可以进行设计使其传递,那么为什么不让呼叫者处理它而不用担心它。 StreamReader承担这个责任总是让我感到困惑。如果不是,我也不会在意。

不要吞下该异常,尤其是在供外部使用的代码中。

如何从.Net DLL获取公共出口列表? - c#

我可以使用“ dumpbin”和“ dll export”之类的工具来查看标准win32 DLL的公共入口点(“ exports”),例如Windows \ SYSTEM32 \ GDI32.dll。但是,当我在.Net DLL上使用这些相同的工具时,我看到的仅仅是 2000 .reloc 2000 .rsrc 48000 .text 我有一个C#/。Net…

如何在ASP.NET Core Web应用程序中增加JSON反序列化MaxDepth限制 - c#

我们正在将ASP.NET Core 2.1与.NET Framework 4.6.2结合使用。我们有一个客户需要向我们的Web应用程序发送一个很大程度上嵌套的json结构。当他们进行此调用时,我们将输出以下日志并返回错误: 读取器的MaxDepth超过了32。路径“ super.long.path.to property”,第1行,位置42111。”我浏览了…

ASP.NET MVC 5自定义登录,无需脚手架,数据库优先 - c#

我对asp.net和mvc还是很陌生,所以我正在努力学习尽可能多的知识...为此,我从头开始编写博客网站,但是我对身份验证和授权有些困惑。由于我倾向于不真正使用任何脚手架的东西,所以我首先要使用数据库,所以不希望asp.net身份为我创建表。我对散列和加盐密码很酷,并对照数据库检查用户,我遇到的麻烦是将用户设置为登录状态并检查他们应该能够访问什么。我真的很想…

asp.net oledbcommand返回所有行 - c#

我正在使用Oledbconnection连接到Microsoft Access数据库,并且正在使用OleDbCommand检索一些信息。我在数据库中有一个名为retrieveInfo的查询,该查询检索3行数据。字段中有一些重复项,但是应该是这样。我的数据如下所示: Name Email A [email protected] B [email protected] B C@gmai…

java.net.URI.create异常 - java

java.net.URI.create("http://adserver.adtech.de/adlink|3.0") 抛出java.net.URISyntaxException: Illegal character in path at index 32: http://adserver.adtech.de/adlink|3.0 虽然n…