CA2233: Vorgänge sollten nicht überlaufen
TOC
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

CA2233: Vorgänge sollten nicht überlaufen

 

TypeName

OperationsShouldNotOverflow

CheckId

CA2233

Kategorie (Category)

Microsoft.Usage

Unterbrechende Änderung

Nicht unterbrechend

Eine Methode führt einen arithmetischen Vorgang aus und validiert die Operanden nicht im Voraus, um einen Überlauf zu verhindern.

Arithmetische Operationen sollten erst nach einer Validierung der Operanden ausgeführt werden, um sicherzustellen, dass das Ergebnis der Operation nicht außerhalb des Bereichs möglicher Werte der beteiligten Datentypen liegt.Je nach dem Ausführungskontext und den beteiligten Datentypen kann ein arithmetischer Überlauf entweder zu einer System.OverflowException führen oder bewirken, dass die höchstwertigen Bits des Ergebnisses verworfen werden.

Um einen Verstoß gegen diese Regel zu beheben, validieren Sie die Operanden vor der Ausführung des Vorgangs.

Eine Warnung dieser Regel kann gefahrlos unterdrückt werden, wenn die möglichen Werte der Operanden niemals zu einem Überlauf der arithmetischen Operation führen.

Eine Methode im folgenden Beispiel manipuliert eine ganze Zahl, die gegen die Regel verstößt.Visual Basic erfordert das Deaktivieren der Ganzzahlüberlaufoption Entfernen, damit der Vorgang ausgelöst werden kann.

using System; 

namespace Samples
{    
    public static class Calculator    
    {        
        public static int Decrement(int input)        
        {             
            // Violates this rule            
            input--;             
            return input;        
        }    
    }
}

Wenn an die Methode in diesem Beispiel T:System.Int32.MinValue übergeben wird, würde ein Unterlauf für die Operation auftreten.Dies bewirkt, dass das höchstwertige Bit des Ergebnisses verworfen wird.Der folgende Code zeigt, wie es dazu kommt.

[C#]

public static void Main()
{
    int value = int.MinValue;    // int.MinValue is -2147483648 
    value = Calculator.Decrement(value); 
    Console.WriteLine(value);
}

[VB]

Public Shared Sub Main()     
    Dim value = Integer.MinValue    ' Integer.MinValue is -2147483648 
    value = Calculator.Decrement(value) 
    Console.WriteLine(value) 
End Sub

2147483647

Im folgenden Beispiel wird der vorherige Verstoß korrigiert, indem der Wert der Eingabe überprüft wird.

using System; 

namespace Samples
{    
    public static class Calculator    
    {        
        public static int Decrement(int input)        
        {            
            if (input == int.MinValue)                
                throw new ArgumentOutOfRangeException("input", "input must be greater than Int32.MinValue");

            input--;             
            return input;        
        }    
    }
}

Im folgenden Beispiel wird der vorherige Verstoß korrigiert, indem die Operation von einem checked-Block umschlossen wird.Wenn die Operation einen Überlauf verursacht, wird eine System.OverflowException ausgelöst.

Beachten Sie, dass checked-Blöcke in Visual Basic nicht unterstützt werden.

using System; 

namespace Samples
{    
    public static class Calculator    
    {        
        public static int Decrement(int input)        
        {            
            checked            
            {                
                input--;            
            }                        

            return input;        
        }    
    }
}

Wenn Sie den mit checked ausgeführten arithmetischen Überlauf/Unterlauf in C# aktivieren, entspricht dies dem Umschließen jeder einzelnen Ganzzahloperation mit einem checked-Block.

So aktivieren Sie den mit checked ausgeführten arithmetischen Überlauf/Unterlauf in C#

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Eigenschaften.

  2. Wählen Sie die Registerkarte Erstellen aus, und klicken Sie dann auf Erweitert.

  3. Wählen Sie Auf arithmetischen Überlauf/Unterlauf überprüfen aus, und klicken Sie auf OK.

Anzeigen:
© 2016 Microsoft