Compartilhar via


desmarcada (C# referência)

O unchecked palavra-chave é usada para suprimir a verificação de estouro de operações aritméticas de tipo integral e conversões.

Em um contexto desmarcado, se uma expressão produz um valor que está fora do intervalo do tipo de destino, o estouro não está sinalizado. Por exemplo, porque o cálculo no exemplo a seguir é executado em um unchecked bloco ou expressão, o fato de que o resultado é muito grande para um número inteiro é ignorado, e int1 é atribuído o valor-2,147,483,639.

unchecked
{
    int1 = 2147483647 + 10;
}
int1 = unchecked(ConstantMax + 10);

Se a unchecked ambiente for removido, ocorre um erro de compilação. O estouro pode ser detectado no momento da compilação, porque todos os termos da expressão são constantes.

Expressões que contenham os termos de não constante estão desmarcadas por padrão em tempo de compilação e tempo de execução. Consulte Checked (C# referência) para obter informações sobre como habilitar um ambiente marcado.

Como a verificação de estouro leva tempo, o uso de código não verificado em situações onde não há perigo de estouro pode melhorar o desempenho. No entanto, se o estouro é uma possibilidade, um ambiente marcado deve ser usado.

Exemplo

Este exemplo mostra como usar o unchecked palavra-chave.

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. 
        }
    }
}

Especificação da linguagem C#

Para obter mais informações, consulte C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

C# Keywords

Selecionado e desmarcada (C# referência)

Checked (C# referência)

Conceitos

C# Programming Guide

Outros recursos

C# Reference