Cœu*_*œur 2 c# idisposable using-statement windows-store-apps
当变量是IDisposable时,我们有using关键字来管理处理.但是,如果我们在方法中返回值,那么我们应该有using两次吗?
StringContent stringToStringContent(string str)
{
using (StringContent content = new StringContent(str))
{
return content;
}
}
void logStringContent()
{
using (StringContent content = stringToStringContent("test"))
{
Debug.WriteLine(content.ToString());
return;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面这个例子中,我只有1 new但我有2个using相同的东西.所以我觉得它不平衡.是否更好:
a)保持两者using,语言/编译器知道它的工作,以避免双重处置?
b)只保留using与new一起,而在其他情况下,没有必要?:
void logStringContent()
{
StringContent content = stringToStringContent("test");
Debug.WriteLine(content.ToString());
return;
}
Run Code Online (Sandbox Code Playgroud)
c)只有using在你不回来时才保留,并且在你返回时不需要保留?:
StringContent stringToStringContent(string str)
{
return new StringContent(str);
}
Run Code Online (Sandbox Code Playgroud)
我唯一能感觉到的是b)不是正确的答案,因为它不适用于此处描述的问题:.NET HttpClient在多次请求后挂起(除非Fiddler处于活动状态)
我认为这c是正确的答案 - 你从方法返回(引用)一个对象 - 在你返回之前已经处理掉了那个对象是没有意义的.例如,File.OpenRead不会丢弃它返回的流,不是吗?
在方法文档中指出调用者负责处理对象是个好主意.同样,一些方法接受一次性类型并声明调用者不应该自己处理对象.在这两种情况下,都有效地转移了妥善处理物品的责任.