Я иногда использую фигурные скобки, чтобы изолировать блок кода, чтобы избежать использования по ошибке переменной позже. Например, когда я помещал несколько SqlCommand
в один и тот же метод, я часто копировал-вставлял блоки кода, заканчивая смешением имен и выполнением в два раза некоторых команд. Добавление фигурных скобок помогает избежать этой ситуации, поскольку неправильное использование SqlCommand
в неправильном месте приведет к ошибке. Вот иллюстрация:
Collection<string> existingCategories = new Collection<string>();
// Here a beginning of a block
{
SqlCommand getCategories = new SqlCommand("select Title from Movie.Category where SourceId = @sourceId", sqlConnection, sqlTransaction);
getCategories.Parameters.AddWithValue("@sourceId", sourceId);
using (SqlDataReader categoriesReader = getCategories.ExecuteReader(System.Data.CommandBehavior.SingleResult))
{
while (categoriesReader.Read())
{
existingCategories.Add(categoriesReader["Title"].ToString());
}
}
}
if (!existingCategories.Contains(newCategory))
{
SqlCommand addCategory = new SqlCommand("insert into Movie.Category (SourceId, Title) values (@sourceId, @title)", sqlConnection, sqlTransaction);
// Now try to make a mistake and write/copy-paste getCategories instead of addCategory. It will not compile.
addCategory.Parameters.AddWithValue("@sourceId", sourceId);
addCategory.Parameters.AddWithValue("@title", newCategory);
addCategory.ExecuteNonQuery();
}
Теперь StyleCop выводит предупреждение каждый раз, когда блок следует за пустой строкой. С другой стороны, не помещая пустую строку, код будет намного сложнее понять.
// Something like:
Collection<string> existingCategories = new Collection<string>();
{
// Code here
}
// can be understood as (is it easy to notice that semicolon is missing?):
Collection<string> existingCategories = new Collection<string>()
{
// Code here
}
Итак,
-
Есть ли что-то неправильное при использовании фигурных скобок для создания блоков кода только для целей переменной видимости?
-
Если все в порядке, как сделать его более читаемым, не нарушая правила StyleCop?