我有以下用于关闭流的代码.
void CloseStream(Stream s)
{
if (s != null)
s.Close();
}
void CloseStream(HttpWebResponse s)
{
if (s != null)
s.Close();
}
void CloseStream(StreamReader s)
{
if (s != null)
s.Close();
}
代码完美无缺,但我想重构3种方法,如果可能的话.
理想情况下,该方法看起来像这样:
void CloseStream(Object obj)
{
obj.Close();
}
但是我不能做obj.Close()因为Object类没有实现这样的方法.
所以我想知道你们中是否有人知道如何解决它.
谢谢你的时间,
凯文
解决方法:
所有这些’流’都是disposable,所以使用Dispose()而不是Close():
void CloseStream(IDisposable s)
{
if (s != null)
s.Dispose();
}
还要考虑使用内置的功能.Net Framework – using
语句将自动处理一次性对象,而无需对CloseStream进行任何额外调用:
using(StreamReader reader = File.OpenText(path))// create disposable here
{
// use disposable
}
此代码将自动检查一次性是否为空,并在使用块结束时将其丢弃.上面的代码块将编译成:
StreamReader reader = File.OpenText(path);
try
{
// use disposable
}
finally // will be executed even in case of exception
{
if (reader != null)
reader.Dispose(); // internally calls Close()
}