我经常使用“using” block 来处理对象。 今天,我使用 HttpWebRequest 来发布数据,我对这两种方法感到困惑。
方法一:
var request = (HttpWebRequest)WebRequest.Create("http://www...");
using (var writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(JsonConvert.SerializeObject(content));
}
方法二:
var request = (HttpWebRequest)WebRequest.Create("http://www...");
using (var stream = request.GetRequestStream())
using (var writer = new StreamWriter(stream))
{
writer.Write(JsonConvert.SerializeObject(content));
}
在方法二中,所有stream和streamwirter都在“using” block 中,所以肯定会被dispose。但在方法 1 中,我不确定流 request.GetRequestStream() 是否会被处理。谁能给我解释一下?非常感谢!
最佳答案
基本上,这取决于两件事:
StreamWriter
构造函数是否会在传递非空Stream
引用时抛出异常 - 我认为在这种情况下不会。 (如果流是只读的,它会……此时流不会被释放。)StreamWriter.Dispose
是否处理底层流 - 它确实处理了,除非您调用了 constructor overload明确允许您控制
所以基本上,我相信在这种情况下它是安全的...当您的 using
语句处理 StreamWriter
时,这将处理 Stream
.
但是,如评论中所述,使用两个 using
语句意味着您不需要执行这种推理。
关于c# - 使用 "using block"时感到困惑 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37077512/