C#中using语句的大多数示例都在括号内声明对象,如下所示:
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Customers", connection))
{
// Code goes here
}
Run Code Online (Sandbox Code Playgroud)
如果我使用using语句以下方式使用using语句之外的对象会发生什么:
SqlCommand cmd = new SqlCommand("SELECT * FROM Customers", connection);
using (cmd)
{
// Code goes here
}
Run Code Online (Sandbox Code Playgroud)
以第二个例子中的方式使用using语句是一个坏主意,为什么?
Ric*_*ard 15
在using语句的控制表达式中声明变量会将变量的范围限制在using语句中.在第二个示例中,变量cmd可以在using语句之后继续使用(当它将被释放时).
通常,建议仅将变量用于一个目的,限制其范围允许稍后在范围内使用具有相同名称的另一个命令(可能在另一个使用表达式中).也许更重要的是,它告诉读者您的代码(并且维护比初始编写需要更多的努力),cmd而不是在using语句之外使用:您的代码更容易理解.
是的,这是有效的 - 对象仍将以相同的方式处理,即在结束时,如果执行流程试图离开块(返回/异常).
但是,如果您尝试在之后再次使用它using,它将被处理掉,因此您无法知道该实例是否可以安全继续使用,因为dispose不必重置对象状态.此外,如果在构造期间发生异常,它将不会遇到using阻塞.
我将在语句中声明并初始化变量以定义其范围. 如果您使用的using话,机会非常好,您不需要它超出范围.
MemoryStream ms = new MemoryStream(); // Initialisation not compiled into the using.
using (ms) { }
int i = ms.ReadByte(); // Will fail on closed stream.
Run Code Online (Sandbox Code Playgroud)
以下是有效的,但在大多数情况下有些不必要:
MemoryStream ms = null;
using (ms = new MemoryStream())
{ }
// Do not continue to use ms unless re-initializing.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3234 次 |
| 最近记录: |