C# 使用不带分号的语句
本文关键字:语句 | 更新日期: 2023-09-27 17:55:20
我在网上找到了以下代码:
using (SqlConnection con = new SqlConnection(connectionString))
{
//
// Open the SqlConnection.
//
con.Open();
//
// The following code uses an SqlCommand based on the SqlConnection.
//
using (SqlCommand command = new SqlCommand("SELECT TOP 2 * FROM Dogs1", con))
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine("{0} {1} {2}",
reader.GetInt32(0), reader.GetString(1), reader.GetString(2));
}
}
}
谁能解释我为什么使用(SqlCommand..) 不以分号结尾。我的第二个问题是,通常在使用后,我们必须有 { } 来指示使用变量的范围,为什么在这种情况下它丢失了?以及如何,何时释放命令对象?
谁能解释为什么使用 (SqlCommand ..) 不以分号结尾
因为 using 命令将只运行一个块:后面的那个。该块只能是一个语句。如果在末尾加上分号,它将不执行任何操作(运行空语句)。
例如,"if"的情况也是如此。
if(a==b)
Console.Write("they are equal!");
Console.Write("I'm outside the if now because if only runes one block");
但
if(1==2);
Console.Write("I will always run because the if ends with a semicolon! (executes an empty statement)");
我的第二个问题是通常在使用后我们必须有 { } 到 使用变量指示其范围,为什么在这种情况下它丢失了?
不是,仔细看。
以及如何,何时释放命令对象?
它将调用对象。Dispose()(如果它不是空的)当块结束时(即使它抛出异常)。
using 构造不要求语句以分号结尾。
使用 构造会自动确保您的对象得到正确处置。
如果 {} 不存在,则范围是下一条语句。 在您的情况下,这是使用(SqlReader...)的整个块,因为它的范围为 {}
- 谁能解释为什么使用 (SqlCommand ..) 不以分号结尾。
像 Using、If、For 和 Foreach 这样的关键字不需要 ; 来标记结尾因为它还没有结束!你永远不会发现这样的代码有用。
If(true);//This is totally meaningless code
Console.WrtieLine("Hello world!");
- 我的第二个问题是,通常在使用后,我们必须有 { } 来指示使用变量的范围,为什么在这种情况下它丢失了?
因为在这种情况下可以安全地确定外部使用块的范围。
using (SqlCommand command = new SqlCommand("SELECT TOP 2 * FROM Dogs1", con))
using (SqlDataReader reader = command.ExecuteReader())
同样你也可以写
for (int i = 0; i < 3; i++)
for (int j = 0; j < 2; j++)
{
Console.WriteLine(string.Format("i = {0}, j ={1}",i, j));
}
//i and j are no longer accessible from this line after
//because their scopes ends with the }
- 以及如何,何时释放命令对象?
使用语句的整个概念在这里得到了很好的解释