unchecked (référence C#)
Le mot clé unchecked sert à supprimer le contrôle de dépassement pour les opérations arithmétiques de type entier et les conversions.
Dans un contexte non vérifié (unchecked), si une expression produit une valeur qui est hors de la plage du type de destination, le résultat n'est pas marqué d'un indicateur. Le calcul de l'exemple suivant étant exécuté dans un bloc ou une expression unchecked, le fait que le résultat est trop volumineux pour un entier est ignoré, et la valeur -2,147,483,639 est assignée à int1.
unchecked
{
int1 = 2147483647 + 10;
}
int1 = unchecked(ConstantMax + 10);
Si l'environnement unchecked est supprimé, une erreur de compilation se produit. Le dépassement de capacité peut être détecté au moment de la compilation parce que tous les termes de l'expression sont des constantes.
Les expressions qui contiennent des termes non constants sont non vérifiées par défaut au moment de la compilation et de l'exécution. Consultez checked (référence C#) pour plus d'informations sur l'activation d'un environnement vérifié.
Parce que la vérification du dépassement de capacité prend du temps, l'utilisation de code non vérifié dans les situations où il n'y a aucun danger de dépassement peut améliorer la performance. Toutefois, si le dépassement de capacité est susceptible de se produire, un environnement vérifié doit être utilisé.
Exemple
Cet exemple indique comment utiliser le mot clé unchecked.
class UncheckedDemo
{
static void Main(string[] args)
{
// int.MaxValue is 2,147,483,647.
const int ConstantMax = int.MaxValue;
int int1;
int int2;
int variableMax = 2147483647;
// The following statements are checked by default at compile time. They do not
// compile.
//int1 = 2147483647 + 10;
//int1 = ConstantMax + 10;
// To enable the assignments to int1 to compile and run, place them inside
// an unchecked block or expression. The following statements compile and
// run.
unchecked
{
int1 = 2147483647 + 10;
}
int1 = unchecked(ConstantMax + 10);
// The sum of 2,147,483,647 and 10 is displayed as -2,147,483,639.
Console.WriteLine(int1);
// The following statement is unchecked by default at compile time and run
// time because the expression contains the variable variableMax. It causes
// overflow but the overflow is not detected. The statement compiles and runs.
int2 = variableMax + 10;
// Again, the sum of 2,147,483,647 and 10 is displayed as -2,147,483,639.
Console.WriteLine(int2);
// To catch the overflow in the assignment to int2 at run time, put the
// declaration in a checked block or expression. The following
// statements compile but raise an overflow exception at run time.
checked
{
//int2 = variableMax + 10;
}
//int2 = checked(variableMax + 10);
// Unchecked sections frequently are used to break out of a checked
// environment in order to improve performance in a portion of code
// that is not expected to raise overflow exceptions.
checked
{
// Code that might cause overflow should be executed in a checked
// environment.
unchecked
{
// This section is appropriate for code that you are confident
// will not result in overflow, and for which performance is
// a priority.
}
// Additional checked code here.
}
}
}
Spécification du langage C#
Pour plus d'informations, consultez la Spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.
Voir aussi
Référence
Checked et Unchecked (référence C#)