Czasami używam nawiasów klamrowych, aby wyizolować blok kodu, aby uniknąć błędnego użycia zmiennej później. Na przykład, kiedy wstawiam kilka takich samych metod, często kopiuję i wkleja bloki kodu, kończąc na mieszaniu nazw i wykonywaniu podwójnych poleceń. Dodanie szelek pomaga uniknąć tej sytuacji, ponieważ użycie niewłaściwego SqlCommand
w niewłaściwym miejscu spowoduje błąd. Oto ilustracja:Czy korzystanie z nawiasów klamrowych jest niewłaściwe w celu zmiany zakresu?
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();
}
Teraz StyleCop wyświetla ostrzeżenie za każdym razem, gdy blok podąża za pustą linią. Z drugiej strony, nie umieszczenie pustej linii sprawiłoby, że kod byłby trudniejszy do zrozumienia.
// 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
}
Więc
Czy istnieje coś złego w użyciu szelki tworzyć bloki kodu tylko dla celów zmiennym?
Jeśli wszystko jest w porządku, jak uczynić go bardziej czytelnym bez naruszania reguł StyleCop?
Są to tak zwane anonimowe bloki. Powiązane: http://stackoverflow.com/questions/85282/what-is-the-value-of-an-anonymous-unattached-block-in-c i http://stackoverflow.com/questions/500006/what- jest-cel-z-anonimowych-blokuje-w-stylu-językach-języków –