gpt4 book ai didi

c# - 使用 c# using 语句延迟实例化

转载 作者:太空宇宙 更新时间:2023-11-03 18:17:02 25 4
gpt4 key购买 nike

有没有办法写一个using没有实例化 IDisposable 的语句立即地?

例如,如果我需要执行以下操作:

using (MyThing thing)
{
if (_config == null)
{
thing = new MyThing();
}
else
{
thing = new MyThing(_config);
}

// do some stuff

} // end of 'using'

对于这种情况,是否有可接受的模式?还是我要重新处理 IDisposable再次明确?

最佳答案

好吧,在您的示例中,您确实会立即实例化一次性对象 - 仅基于条件。例如,您可以使用:

using (MyThing thing = _config == null ? new MyThing() : new MyThing(_config))
{
...
}

更一般地说,您可以使用一种方法:
using (MyThing thing = CreateThing(_config))
{
}

棘手的一点是,如果实例化的时间根据各种条件而改变。使用 using 确实更难处理。声明,但也建议您尝试重构代码以避免该要求。这并不总是可能的,但值得一试。

另一种选择是将“事物”封装在一个包装器中,该包装器将适本地懒惰地创建真正的一次性对象,并将其委托(delegate)给该对象以进行处置以及您可以对该类型执行的任何其他操作。在某些情况下,这样的委派可能会很痛苦,但它可能是合适的——取决于你真正想要做什么。

关于c# - 使用 c# using 语句延迟实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4646945/

25 4 0
文章推荐: ruby-on-rails - 如何使用
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com