War diese Seite hilfreich?
Ihr Feedback ist uns wichtig. Teilen Sie uns Ihre Meinung mit.
Weiteres Feedback?
1500 verbleibende Zeichen
CA2233: Vorgänge sollten nicht überlaufen
Collapse the table of content
Expand the table of content
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.

ms182354.collapse_all(de-de,VS.140).gifBeschreibung

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.

ms182354.collapse_all(de-de,VS.140).gifCode


using System; 

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


ms182354.collapse_all(de-de,VS.140).gifKommentare

Wenn an die Methode in diesem Beispiel 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

ms182354.collapse_all(de-de,VS.140).gifAusgabe

2147483647

ms182354.collapse_all(de-de,VS.140).gifBeschreibung

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

ms182354.collapse_all(de-de,VS.140).gifCode


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


ms182354.collapse_all(de-de,VS.140).gifBeschreibung

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.

ms182354.collapse_all(de-de,VS.140).gifCode


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:
© 2015 Microsoft