C# использование операторов без точки с запятой
Я нашел следующий код онлайн:
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 ..) не заканчивается точкой с запятой. Мой второй вопрос, как правило, после использования мы должны иметь { }, чтобы указать область применения этой переменной, почему в этом случае она отсутствует? и как, когда он будет располагать объект команды?
3 ответа
Может кто-нибудь объяснить мне, почему использование (SqlCommand ..) не заканчивается точкой с запятой
Потому что команда using будет запускать ровно один блок: следующий. Этот блок может быть только одним утверждением. Если вы ставите точку с запятой в конце, это ничего не изменит (запустите пустую инструкцию).
Это то же самое, что и "если", например.
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)");
Мой второй вопрос, как правило, после использования мы должны иметь { }, чтобы указать область применения этой переменной, почему в этом случае она отсутствует?
Это не так, посмотрите поближе.
и как, когда он будет располагать объект команды?
Он будет вызывать object.Dispose() (если он не нулевой), когда блок заканчивается (даже если он выдает исключение).
Конструкция using не требует, чтобы оператор заканчивался точкой с запятой.
Конструкция 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 }
- и как, когда он будет располагать объект команды?
Вся концепция использования Statement хорошо объяснена здесь