提问人:Dominique 提问时间:5/23/2023 最后编辑:Dominique 更新时间:5/23/2023 访问量:121
在“使用”中检测“使用”
Detect "using" within "using"
问:
我正在开发一个 C# 应用程序,它经常使用以下源代码:
using (var database ...
我遇到了一个问题(抛出了一个异常),我担心它可能是由一个子句引起的,在另一个子句中被调用(在同一个变量上:我不关心不同变量上的嵌套子句)。using
using
using
有没有办法使用 Visual Studio 调试器来检测这一点?
提前致谢
答:
1赞
CharithJ
5/23/2023
#1
这不太可能导致问题。我能想到的唯一可能导致的异常是,如果对已释放的对象执行操作,则会抛出。
如果您遇到其他异常,则可能与 无关。using
using
ObjectDisposedException
using
出于调试目的,您可以注释掉所有 using 语句,并尝试该异常是否仍然发生。
如果在完成使用之前处理项目有任何问题,您可以将这些相关项目添加到一个 using 块下。所以,它们都将被一起处理。
例如:
using (var db = new Database())
using (var con= new DBCon())
{
}
评论
1赞
Rand Random
5/23/2023
是的,不是真的——class Foo { bool IsClosed => IsDisposed ? throw new MyFancyExcption() : false; }
0赞
CharithJ
5/23/2023
@RandRandom是的,如果有人尝试了 Fancy Exception,这是可能的。至少 FancyException 应该派生自 ObjectDisposedException?无论如何,我同意,我会纠正我的措辞。谢谢
1赞
Charlieface
5/23/2023
Dispose()
即使多次调用也不应该抛出,虽然有糟糕的实现
0赞
CharithJ
5/23/2023
@Charlieface 当然,多次调用 Dispose 不会在 Dispose 方法中引发异常。我的意思是,如果它尝试使用已经处理的对象,可能会导致问题。
评论
using
里面还挺好的:using
using (var dataBase = new SqlConnection(...)) { ... using (var q = new SqlCommand(...)) { ... using (var reader = q.ExecuteReader()) {...} } }