提问人:Gigi 提问时间:3/29/2023 更新时间:3/29/2023 访问量:34
识别包含使用块
Identify the encompassing using block
问:
如何识别调用链的包含使用块?我的意思是不要将使用块创建的对象保存在静态或全局中,也不要传递它。如果我有:
using(new Foo())
{
A();
}
void A()
{
B();
}
在函数 B 中,我希望能够识别和访问 Foo 实例。如果有的话,也可以使用块获得上部包罗万象,等等,那就更好了。
答:
3赞
Marc Gravell
3/29/2023
#1
没有神奇的方法来获取环境状态,特别是如果你明确排除了静态/异步局部变量之类的东西。
所以:把它传进去。如果需要知道 ,则:B
需要知道 Foo
;不要让它变魔术 - 通过传入它来使其明确和简单:B
Foo
using (Foo foo = new())
{
A(foo);
}
void A(Foo foo) => B(foo);
(是的,我知道你也说过“也不传递它”,但 IMO 这是最合适的解决方案)
评论
Foo
A
B
Foo