Manchmal verwende ich geschweifte Klammern, um einen Codeblock zu isolieren, um die spätere Verwendung einer Variablen aus Versehen zu vermeiden. Zum Beispiel, wenn ich mehrere SqlCommand
s in der gleichen Methode setze, kopiere ich häufig Code-Blöcke, indem ich die Namen mische und zwei Befehle hintereinander ausführe. Das Hinzufügen von geschweiften Klammern hilft, diese Situation zu vermeiden, da die Verwendung eines falschen SqlCommand
an einer falschen Stelle zu einem Fehler führt. Hier eine Abbildung:Ist es falsch, geschweifte Klammern für verschiedene Zwecke zu verwenden?
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();
}
Jetzt zeigt StyleCop jedes Mal eine Warnung an, wenn ein Block einer leeren Zeile folgt. Wenn Sie jedoch keine Leerzeile einfügen, wird der Code viel schwieriger zu verstehen sein.
// 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
}
So
Gibt es etwas falsch Klammern Sie sich mit der Code-Blöcke zu erstellen, für variable Umfang Zwecke?
Wenn alles in Ordnung ist, wie kann man es lesbarer machen, ohne die Regeln des StyleCop zu verletzen?
Diese werden anonyme Blöcke genannt. Related: http://stackoverflow.com/questions/85282/what-is-the-value-of-an-anonymous-unattached-block-in-c und http://stackoverflow.com/questions/500006/what- is-the-intention-of-anonyme-blocks-in-c-style-languages –