gpt4 book ai didi

c# - 在 C# 中使用 `using` 关键字避免多次处置的最佳实践

转载 作者:行者123 更新时间:2023-12-03 03:20:53 24 4
gpt4 key购买 nike

当变量是 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;
}
}

在上面的示例中,我只有 1 个 new,但我有 2 个 using 来做同样的事情。所以我觉得这是不平衡的。是不是更好:

a) 保留using,并且语言/编译器知道它的工作以避免双重处置?

b) 仅将 usingnew 放在一起,其他情况下不需要?:

void logStringContent()
{
StringContent content = stringToStringContent("test");
Debug.WriteLine(content.ToString());
return;
}

c) 不返回时只保留使用,返回时不需要?:

StringContent stringToStringContent(string str)
{
return new StringContent(str);
}

我唯一能感觉到的是 b) 不是正确的答案,因为它不适用于此处描述的问题:.NET HttpClient hangs after several requests (unless Fiddler is active)

最佳答案

我认为 c 是这里的正确答案 - 您正在从该方法返回(引用)一个对象 - 在返回该对象之前已经处理该对象是没有意义的。例如,File.OpenRead 不会处理它返回的流,不是吗?

最好在方法文档中指出调用者负责处理该对象。同样,某些方法接受一次性类型,并声明调用者不应自行处置该对象。在这两种情况下,都有效地转移了正确处置对象的责任。

关于c# - 在 C# 中使用 `using` 关键字避免多次处置的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16861329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com