gpt4 book ai didi

c# - 如果我在方法中的 using block 内返回一个值,using 是否会在返回之前处理该对象?

转载 作者:太空狗 更新时间:2023-10-30 00:12:48 25 4
gpt4 key购买 nike

我正在 ASP.NET 应用程序中检查一些旧的 C#.NET 代码,确保所有 SqlConnections 都包含在 using block 中。

我知道 usingtry/finally 相同,它在 finally 中处理对象> 无论 try 中发生什么。如果我有一个方法在 using 中返回一个值,即使执行在返回时离开了该方法,它是否仍然在我的对象上调用 .Dispose() 之前/返回期间/之后?

public static SqlCommand getSqlCommand(string strSql, string strConnect){
using (SqlConnection con = new SqlConnection(strConnect))
{
con.Open();
SqlCommand cmd = GetSqlCommand();
cmd.Connection = con;
cmd.CommandText = strSql;
return cmd;
}
}

更新:接受的答案是我认为最能回答我的问题的答案,但请注意 this answer捕获了这段代码的愚蠢之处,我正在返回一个使用已处置连接的命令! :P

最佳答案

是的。它会处理你的对象。这实际上会导致您的代码出现问题,因为返回的 SqlCommand 依赖于 SqlConnection,它将在控制流返回给您的调用方之前被处理掉。

但是,您可以使用委托(delegate)来解决这个问题。处理此问题的一个好模式是像这样重写您的方法:

public static SqlCommand ProcessSqlCommand(string strSql, string strConnect, Action<SqlCommand> processingMethod)
{
using (SqlConnection con = new SqlConnection(strConnect))
{
con.Open();
SqlCommand cmd = GetSqlCommand();
cmd.Connection = con;
cmd.CommandText = strSql;
processingMethod(cmd);
}
}

然后你可以这样调用它:

ProcessSqlCommand(sqlStr, connectStr, (cmd) =>
{
// Process the cmd results here...
});

关于c# - 如果我在方法中的 using block 内返回一个值,using 是否会在返回之前处理该对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2313196/

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