A volte uso le parentesi graffe per isolare un blocco di codice per evitare di utilizzare per errore una variabile in un secondo momento. Ad esempio, quando metto più SqlCommand
nello stesso metodo, faccio spesso copia-incolla dei blocchi di codice, terminando mescolando i nomi ed eseguendo il doppio di alcuni comandi. L'aggiunta di parentesi graffe aiuta a evitare questa situazione, poiché l'utilizzo di un valore errato di SqlCommand
in un posto sbagliato causerà un errore. Ecco una illustrazione:È sbagliato utilizzare le parentesi per scopi di ambito variabile?
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();
}
Ora, StyleCop visualizza un avviso ogni volta che un blocco segue una linea vuota. D'altra parte, non mettere una riga vuota renderebbe il codice molto più difficile da capire.
// 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
}
Quindi,
C'è qualcosa che non va a usare le parentesi per creare blocchi di codice solo per scopi di scope delle variabili?
Se è tutto a posto, come renderlo più leggibile senza violare le regole di StyleCop?
Questi sono chiamati blocchi anonimi. Relativo: http://stackoverflow.com/questions/85282/what-is-the-value-of-an-anonymous-unattached-block-in-c e http://stackoverflow.com/questions/500006/what- is-the-purpose-of-anonymous-blocks-in-c-style-languages –