L'avertissement que vous attendiez n'est pas mis en œuvre parce que ce n'est pas un avertissement utile d'avoir.
Dans les applications réelles, le compilateur est très souvent confronté avec le code qu'il peut tout à fait prouver est inaccessible, peut-être même quelque chose d'aussi éhonté comme
static class Program
{
private static void Main()
{
if (false)
{
Console.WriteLine("lol");
}
}
}
Je n'ai pas de compilateur C# sur cet ordinateur, mais je parie que vous il n'y a pas d'avertissement pour que, soit. C'est parce que, quand vous mettez en if (false) { ... }
autour d'un bloc de code, vous n'avez que sur le but, peut-être pour désactiver quelque chose temporairement pour une expérience. Vous harcelant sur il ne serait pas utile.
La plus courante est que ce n'est pas un littéral false
, c'est une constante de compilation que la construction du système est défini sur true ou false en fonction de la configuration, vous voulez le compilateur pour supprimer le code inaccessible en construire un mais pas l'autre, et vous ne voulez pas les plaintes de toute façon.
Même plus que cela, c'est pour le début des optimisations comme l'in-lining et de la constante de propagation de découvrir qu'une condition est toujours fausse; supposons que vous avez quelque chose comme
static class Program
{
private static void Fizz(int i)
{
if (i % 3 == 0) {
Console.WriteLine("fizz");
} else {
Console.WriteLine(i);
}
}
private static void Main()
{
Fizz(4);
}
}
De toute évidence, vous ne voulez pas obtenir a dit que d'un côté de la conditionnelle à l'intérieur de Fizz() a été inaccessible juste parce qu'il a été appelé seulement avec l'argument 4 dans ce programme.