Dans certains cas (assez rares), il existe un risque de:
- réutiliser une variable qui n'est pas destinée à être réutilisée (voir exemple 1), 
- ou en utilisant une variable au lieu d'une autre, proche sémantiquement (voir l'exemple 2). 
Exemple 1:
var data = this.InitializeData();
if (this.IsConsistent(data, this.state))
{
    this.ETL.Process(data); // Alters original data in a way it couldn't be used any longer.
}
// ...
foreach (var flow in data.Flows)
{
    // This shouldn't happen: given that ETL possibly altered the contents of `data`, it is
    // not longer reliable to use `data.Flows`.
}Exemple 2:
var userSettingsFile = SettingsFiles.LoadForUser();
var appSettingsFile = SettingsFiles.LoadForApp();
if (someCondition)
{
    userSettingsFile.Destroy();
}
userSettingsFile.ParseAndApply(); // There is a mistake here: `userSettingsFile` was maybe
                                  // destroyed. It's `appSettingsFile` which should have
                                  // been used instead.Ce risque peut être atténué en introduisant un périmètre:
Exemple 1:
// There is no `foreach`, `if` or anything like this before `{`.
{
    var data = this.InitializeData();
    if (this.IsConsistent(data, this.state))
    {
        this.ETL.Process(data);
    }
}
// ...
// A few lines later, we can't use `data.Flows`, because it doesn't exist in this scope.Exemple 2:
{
    var userSettingsFile = SettingsFiles.LoadForUser();
    if (someCondition)
    {
        userSettingsFile.Destroy();
    }
}
{
    var appSettingsFile = SettingsFiles.LoadForApp();
    // `userSettingsFile` is out of scope. There is no risk to use it instead of
    // `appSettingsFile`.
}Cela vous semble-t-il faux? Souhaitez-vous éviter une telle syntaxe? Est-ce difficile à comprendre par les débutants?