Ce bug (comme Lippert appelle ci-dessus) a d'étranges conséquences. Bien sûr, ce code donne également pas au moment de la compilation des avertissements:
static int Main()
{
return 0;
throw new Exception("Can you reach me?");
}
Si vous êtes créatif, vous pouvez toujours faire de l' throw
déclaration induire (indépendantes) de mises en garde. Dans ce curieux exemple, le code génère un avertissement seulement parce que "vert" est inaccessible:
static int Main()
{
return 0;
throw new Exception(((Func<string>)(() => { if (2 == 2) { return "yellow"; } return "green"; }))());
}
(code crée une instance de délégué d'un lambda et invoque le délégué).
Mais cet exemple est plus simple et semble pire:
static int Main()
{
int neverAssigned;
return 0;
throw new Exception(neverAssigned.ToString());
}
Ce dernier exemple de code compile également avec aucun avertissement! Il n'y a pas de problème dans "l'aide" neverAssigned
parce que les "utilisation" est inaccessible. Mais vous pouvez également obtenir aucun avertissement à propos d'une variable locale ne jamais assigné (et jamais "vraiment" lire). Donc, pour reprendre, pas d'avertissement à tous, ce qui semble très mal.
Je me demande si ce comportement peut être modifié dans les prochaines versions de Visual C#? Changer il donnera aux gens avertissements qu'ils n'avaient pas auparavant (qui, à mon avis, ils méritent).