IndexOutOfRangeException IndexOutOfRangeException IndexOutOfRangeException IndexOutOfRangeException Class

Definition

Die Ausnahme, die bei einem Versuch ausgelöst wird, auf ein Element eines Arrays oder einer Sammlung mit einem Index zuzugreifen, der sich außerhalb der Begrenzungen des Arrays oder der Sammlung befindet.The exception that is thrown when an attempt is made to access an element of an array or collection with an index that is outside its bounds.

public ref class IndexOutOfRangeException sealed : SystemException
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public sealed class IndexOutOfRangeException : SystemException
type IndexOutOfRangeException = class
    inherit SystemException
Public NotInheritable Class IndexOutOfRangeException
Inherits SystemException
Vererbung
IndexOutOfRangeExceptionIndexOutOfRangeExceptionIndexOutOfRangeExceptionIndexOutOfRangeException
Attribute

Hinweise

Eine IndexOutOfRangeException -Ausnahme wird ausgelöst, wenn ein ungültiger Index verwendet wird, um auf einen Member eines Arrays oder einer Auflistung zuzugreifen, oder um eine bestimmte Position in einem Puffer zu lesen oder zu schreiben.An IndexOutOfRangeException exception is thrown when an invalid index is used to access a member of an array or a collection, or to read or write from a particular location in a buffer. Diese Ausnahme erbt von der Exception -Klasse, fügt jedoch keine eindeutigen Member hinzu.This exception inherits from the Exception class but adds no unique members.

In der Regel IndexOutOfRangeException wird eine Ausnahme aufgrund eines Entwickler Fehlers ausgelöst.Typically, an IndexOutOfRangeException exception is thrown as a result of developer error. Anstatt die Ausnahme zu behandeln, sollten Sie die Ursache des Fehlers diagnostizieren und den Code korrigieren.Instead of handling the exception, you should diagnose the cause of the error and correct your code. Die häufigsten Fehler Gründe sind:The most common causes of the error are:

  • Das vergessen, dass die obere Grenze einer Auflistung oder eines NULL basierten Arrays kleiner ist als die Anzahl der Elemente oder Elemente, wie im folgenden Beispiel veranschaulicht.Forgetting that the upper bound of a collection or a zero-based array is one less than its number of members or elements, as the following example illustrates.

    using System;
    using System.Collections.Generic;
    
    public class Example
    {
       public static void Main()
       {
          List<Char> characters = new List<Char>();
          characters.InsertRange(0, new Char[] { 'a', 'b', 'c', 'd', 'e', 'f' } );
          for (int ctr = 0; ctr <= characters.Count; ctr++)
             Console.Write("'{0}'    ", characters[ctr]);
       }
    }
    // The example displays the following output:
    //    'a'    'b'    'c'    'd'    'e'    'f'
    //    Unhandled Exception: 
    //    System.ArgumentOutOfRangeException: 
    //    Index was out of range. Must be non-negative and less than the size of the collection.
    //    Parameter name: index
    //       at Example.Main()
    
    Imports System.Collections.Generic
    
    Module Example
       Public Sub Main()
          Dim characters As New List(Of Char)()
          characters.InsertRange(0, { "a"c, "b"c, "c"c, "d"c, "e"c, "f"c} )
          For ctr As Integer = 0 To characters.Count
             Console.Write("'{0}'    ", characters(ctr))
          Next
       End Sub
    End Module
    ' The example displays the following output:
    '    'a'    'b'    'c'    'd'    'e'    'f'
    '    Unhandled Exception: 
    '    System.ArgumentOutOfRangeException: 
    '    Index was out of range. Must be non-negative and less than the size of the collection.
    '    Parameter name: index
    '       at System.Collections.Generic.List`1.get_Item(Int32 index)
    '       at Example.Main()
    

    Um den Fehler zu beheben, können Sie Code wie den folgenden verwenden.To correct the error, you can use code like the following.

    using System;
    using System.Collections.Generic;
    
    public class Example
    {
       public static void Main()
       {
          List<Char> characters = new List<Char>();
          characters.InsertRange(0, new Char[] { 'a', 'b', 'c', 'd', 'e', 'f' } );
          for (int ctr = 0; ctr < characters.Count; ctr++)
             Console.Write("'{0}'    ", characters[ctr]);
       }
    }
    // The example displays the following output:
    //        'a'    'b'    'c'    'd'    'e'    'f'
    
    Imports System.Collections.Generic
    
    Module Example
       Public Sub Main()
          Dim characters As New List(Of Char)()
          characters.InsertRange(0, { "a"c, "b"c, "c"c, "d"c, "e"c, "f"c} )
          For ctr As Integer = 0 To characters.Count - 1
             Console.Write("'{0}'    ", characters(ctr))
          Next
       End Sub
    End Module
    ' The example displays the following output:
    '       'a'    'b'    'c'    'd'    'e'    'f'
    

    Anstatt alle Elemente im Array nach dem Index zu durchlaufen, können Sie alternativ die foreach -Anweisung (in C#) oder die For Each -Anweisung (in Visual Basic) verwenden.Alternately, instead of iterating all the elements in the array by their index, you can use the foreach statement (in C#) or the For Each statement (in Visual Basic).

  • Es wird versucht, ein Array Element einem anderen Array zuzuweisen, das nicht angemessen dimensioniert wurde und weniger Elemente aufweist als das ursprüngliche Array.Attempting to assign an array element to another array that has not been adequately dimensioned and that has fewer elements than the original array. Im folgenden Beispiel wird versucht, das letzte Element im value1 -Array dem gleichen Element value2 im-Array zuzuweisen.The following example attempts to assign the last element in the value1 array to the same element in the value2 array. Das value2 Array wurde jedoch fälschlicherweise so dimensioniert, dass es sechs statt sieben Elemente aufweist.However, the value2 array has been incorrectly dimensioned to have six instead of seven elements. Folglich löst die Zuweisung eine IndexOutOfRangeException Ausnahme aus.As a result, the assignment throws an IndexOutOfRangeException exception.

    public class Example
    {
       public static void Main()
       {
          int[] values1 = { 3, 6, 9, 12, 15, 18, 21 };
          int[] values2 = new int[6];
          
          // Assign last element of the array to the new array.
          values2[values1.Length - 1] = values1[values1.Length - 1];
       }
    }
    // The example displays the following output:
    //       Unhandled Exception: 
    //       System.IndexOutOfRangeException: 
    //       Index was outside the bounds of the array.
    //       at Example.Main()
    
    Module Example
       Public Sub Main()
          Dim values1() As Integer = { 3, 6, 9, 12, 15, 18, 21 }
          Dim values2(5) As Integer
          
          ' Assign last element of the array to the new array.
          values2(values1.Length - 1) = values1(values1.Length - 1)
       End Sub
    End Module
    ' The example displays the following output:
    '       Unhandled Exception: 
    '       System.IndexOutOfRangeException: 
    '       Index was outside the bounds of the array.
    '       at Example.Main()
    
  • Verwenden eines Werts, der von einer Suchmethode zurückgegeben wird, um einen Teil eines Arrays oder einer Auflistung beginnend an einer bestimmten Indexposition zu durchlaufen.Using a value returned by a search method to iterate a portion of an array or collection starting at a particular index position. Wenn Sie vergessen, zu überprüfen, ob der Suchvorgang eine Entsprechung gefunden hat IndexOutOfRangeException , löst die Laufzeit eine Ausnahme aus, wie im folgenden Beispiel gezeigt.If you forget to check whether the search operation found a match, the runtime throws an IndexOutOfRangeException exception, as shown in this example.

    using System;
    using System.Collections.Generic;
    
    public class Example
    {
       static List<int> numbers = new List<int>();
    
       public static void Main()
       {
          int startValue; 
          string[] args = Environment.GetCommandLineArgs();
          if (args.Length < 2) 
             startValue = 2;
          else 
             if (! Int32.TryParse(args[1], out startValue))
                startValue = 2;
    
          ShowValues(startValue);
       }
       
       private static void ShowValues(int startValue)
       {   
          // Create a collection with numeric values.
          if (numbers.Count == 0)  
             numbers.AddRange( new int[] { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22} );
    
          // Get the index of a startValue.
          Console.WriteLine("Displaying values greater than or equal to {0}:",
                            startValue);
          int startIndex = numbers.IndexOf(startValue);
          // Display all numbers from startIndex on.
          for (int ctr = startIndex; ctr < numbers.Count; ctr++)
             Console.Write("    {0}", numbers[ctr]);
       }
    }
    // The example displays the following output if the user supplies
    // 7 as a command-line parameter:
    //    Displaying values greater than or equal to 7:
    //    
    //    Unhandled Exception: System.ArgumentOutOfRangeException: 
    //    Index was out of range. Must be non-negative and less than the size of the collection.
    //    Parameter name: index
    //       at System.Collections.Generic.List`1.get_Item(Int32 index)
    //       at Example.ShowValues(Int32 startValue)
    //       at Example.Main()
    
    Imports System.Collections.Generic
    
    Module Example
       Dim numbers As New List(Of Integer)
    
       Public Sub Main()
          Dim startValue As Integer 
          Dim args() As String = Environment.GetCommandLineArgs()
          If args.Length < 2 Then
             startValue = 2
          Else
             If Not Int32.TryParse(args(1), startValue) Then
                startValue = 2
             End If   
          End If
          ShowValues(startValue)
       End Sub
       
       Private Sub ShowValues(startValue As Integer)   
          ' Create a collection with numeric values.
          If numbers.Count = 0 Then 
             numbers.AddRange( { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22} )
          End If   
          ' Get the index of a particular number, in this case 7.
          Console.WriteLine("Displaying values greater than or equal to {0}:",
                            startValue)
          Dim startIndex As Integer = numbers.IndexOf(startValue)
          ' Display all numbers from startIndex on.
          For ctr As Integer = startIndex To numbers.Count - 1
             Console.Write("    {0}", numbers(ctr))
          Next
       End Sub
    End Module
    ' The example displays the following output if the user supplies
    ' 7 as a command-line parameter:
    '    Displaying values greater than or equal to 7:
    '    
    '    Unhandled Exception: System.ArgumentOutOfRangeException: 
    '    Index was out of range. Must be non-negative and less than the size of the collection.
    '    Parameter name: index
    '       at System.Collections.Generic.List`1.get_Item(Int32 index)
    '       at Example.ShowValues(Int32 startValue)
    '       at Example.Main()
    

    In diesem Fall gibt die List<T>.IndexOf Methode-1 zurück, bei der es sich um einen ungültigen Indexwert handelt, wenn keine Entsprechung gefunden wird.In this case, the List<T>.IndexOf method returns -1, which is an invalid index value, when it fails to find a match. Um diesen Fehler zu beheben, überprüfen Sie den Rückgabewert der Suchmethode, bevor Sie das Array durchlaufen, wie in diesem Beispiel gezeigt.To correct this error, check the search method's return value before iterating the array, as shown in this example.

    using System;
    using System.Collections.Generic;
    
    public class Example
    {
       static List<int> numbers = new List<int>();
    
       public static void Main()
       {
          int startValue; 
          string[] args = Environment.GetCommandLineArgs();
          if (args.Length < 2) 
             startValue = 2;
          else 
             if (! Int32.TryParse(args[1], out startValue))
                startValue = 2;
    
          ShowValues(startValue);
       }
       
       private static void ShowValues(int startValue)
       {   
          // Create a collection with numeric values.
          if (numbers.Count == 0)  
             numbers.AddRange( new int[] { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22} );
    
          // Get the index of startValue.
          int startIndex = numbers.IndexOf(startValue);
          if (startIndex < 0) {
             Console.WriteLine("Unable to find {0} in the collection.", startValue);
          }
          else {
             // Display all numbers from startIndex on.
             Console.WriteLine("Displaying values greater than or equal to {0}:",
                            startValue);
             for (int ctr = startIndex; ctr < numbers.Count; ctr++)
                Console.Write("    {0}", numbers[ctr]);
          }
       }
    }
    // The example displays the following output if the user supplies
    // 7 as a command-line parameter:
    //      Unable to find 7 in the collection.
    
    Imports System.Collections.Generic
    
    Module Example
       Dim numbers As New List(Of Integer)
    
       Public Sub Main()
          Dim startValue As Integer 
          Dim args() As String = Environment.GetCommandLineArgs()
          If args.Length < 2 Then
             startValue = 2
          Else
             If Not Int32.TryParse(args(1), startValue) Then
                startValue = 2
             End If   
          End If
          ShowValues(startValue)
       End Sub
       
       Private Sub ShowValues(startValue As Integer)   
          ' Create a collection with numeric values.
          If numbers.Count = 0 Then 
             numbers.AddRange( { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22} )
          End If   
          ' Get the index of startValue.
          Dim startIndex As Integer = numbers.IndexOf(startValue)
          If startIndex < 0 Then
             Console.WriteLine("Unable to find {0} in the collection.", startValue)
          Else
             ' Display all numbers from startIndex on.
             Console.WriteLine("Displaying values greater than or equal to {0}:",
                            startValue)
             For ctr As Integer = startIndex To numbers.Count - 1
                Console.Write("    {0}", numbers(ctr))
             Next
          End If
       End Sub
    End Module
    ' The example displays the following output if the user supplies
    '       Unable to find 7 in the collection.
    
  • Versuch, ein Resultset, eine Auflistung oder ein Array zu verwenden oder aufzulisten, das von einer Abfrage zurückgegeben wird, ohne zu testen, ob das zurückgegebene Objekt über gültige Daten verfügt.Trying to use or enumerate a result set, collection, or array returned by a query without testing whether the returned object has any valid data.

  • Verwenden eines berechneten Werts, um den Start Index, den Endindex oder die Anzahl der zu durch iternenden Elemente zu definieren.Using a computed value to define the starting index, the ending index, or the number of items to be iterated. Wenn das Ergebnis der Berechnung unerwartet ist, kann dies zu einer IndexOutOfRangeException Ausnahme führen.If the result of the computation is unexpected, it might result in an IndexOutOfRangeException exception. Überprüfen Sie die Logik des Programms, um den Indexwert zu berechnen und den Wert vor dem Durchlaufen des Arrays oder der Auflistung zu validieren.You should check your program's logic in calculating the index value and validate the value before iterating the array or collection. Die folgenden Bedingungen müssen alle zutreffen: Andernfalls wird eine IndexOutOfRangeException Ausnahme ausgelöst:The following conditions must all be true; otherwise, an IndexOutOfRangeException exception is thrown:

    • Der Start Index muss größer oder gleich Array.GetLowerBound für die Dimension des Arrays sein, das Sie durchlaufen möchten, oder größer oder gleich 0 (null) für eine Auflistung.The starting index must be greater than or equal to Array.GetLowerBound for the dimension of the array that you want to iterate, or greater than or equal to 0 for a collection.

    • Der endIndex darf für Array.GetUpperBound die Dimension des Arrays, das Sie durchlaufen möchten, nicht überschreiten oder nicht größer oder gleich der Count -Eigenschaft einer Auflistung sein.The ending index cannot exceed Array.GetUpperBound for the dimension of the array that you want to iterate, or cannot be greater than or equal to the Count property of a collection.

    • Die folgende Gleichung muss für die Dimension des Arrays, das Sie durchlaufen möchten, den Wert true haben:The following equation must be true for the dimension of the array that you want to iterate:

      start_index >= lower_bound And start_index + items_to_iterate - 1 <= upper_bound  
      

      Für eine Auflistung muss die folgende Gleichung den Wert "true" aufweisen:For a collection, the following equation must be true:

      start_index >= 0 And start_index + items_to_iterate <= Count  
      

      Tipp

      Der Start Index eines Arrays oder einer Auflistung kann nie eine negative Zahl sein.The starting index of an array or collection can never be a negative number.

  • Angenommen, ein Array muss NULL basiert sein.Assuming that an array must be zero-based. Arrays, die nicht NULL-basiert sind, können mit der Array.CreateInstance(Type, Int32[], Int32[]) -Methode erstellt werden und können von COM-Interop zurückgegeben werden, obwohl Sie nicht CLS-kompatibel sind.Arrays that are not zero-based can be created by the Array.CreateInstance(Type, Int32[], Int32[]) method and can be returned by COM interop, although they aren't CLS-compliant. Das folgende Beispiel veranschaulicht das IndexOutOfRangeException , das ausgelöst wird, wenn Sie versuchen, ein nicht NULL basiertes Array zu durchlaufen, das Array.CreateInstance(Type, Int32[], Int32[]) von der-Methode erstellt wurde.The following example illustrates the IndexOutOfRangeException that is thrown when you try to iterate a non-zero-based array created by the Array.CreateInstance(Type, Int32[], Int32[]) method.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          Array values = Array.CreateInstance(typeof(int), new int[] { 10 }, 
                                              new int[] { 1 });
          int value = 2;
          // Assign values.
          for (int ctr = 0; ctr < values.Length; ctr++) {
             values.SetValue(value, ctr);
             value *= 2;
          }
          
          // Display values.
          for (int ctr = 0; ctr < values.Length; ctr++)
             Console.Write("{0}    ", values.GetValue(ctr));
       }
    }
    // The example displays the following output:
    //    Unhandled Exception: 
    //    System.IndexOutOfRangeException: Index was outside the bounds of the array.
    //       at System.Array.InternalGetReference(Void* elemRef, Int32 rank, Int32* pIndices)
    //       at System.Array.SetValue(Object value, Int32 index)
    //       at Example.Main()
    
    Module Example
       Public Sub Main()
          Dim values = Array.CreateInstance(GetType(Integer), { 10 }, { 1 })
          Dim value As Integer = 2
          ' Assign values.
          For ctr As Integer = 0 To values.Length - 1
             values(ctr) = value
             value *= 2
          Next
          
          ' Display values.
          For ctr As Integer = 0 To values.Length - 1
             Console.Write("{0}    ", values(ctr))
          Next
       End Sub
    End Module
    ' The example displays the following output:
    '    Unhandled Exception: 
    '    System.IndexOutOfRangeException: Index was outside the bounds of the array.
    '       at System.Array.InternalGetReference(Void* elemRef, Int32 rank, Int32* pIndices)
    '       at System.Array.SetValue(Object value, Int32 index)
    '       at Microsoft.VisualBasic.CompilerServices.NewLateBinding.ObjectLateIndexSetComplex(Obje
    '    ct Instance, Object[] Arguments, String[] ArgumentNames, Boolean OptimisticSet, Boolean RV
    '    alueBase)
    '       at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateIndexSet(Object Instance,
    '    Object[] Arguments, String[] ArgumentNames)
    '       at Example.Main()
    

    Um den Fehler zu beheben, wie im folgenden Beispiel gezeigt, können Sie die GetLowerBound -Methode statt Annahmen zum Start Index eines Arrays verwenden.To correct the error, as the following example does, you can call the GetLowerBound method instead of making assumptions about the starting index of an array.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          Array values = Array.CreateInstance(typeof(int), new int[] { 10 }, 
                                              new int[] { 1 });
          int value = 2;
          // Assign values.
          for (int ctr = values.GetLowerBound(0); ctr <= values.GetUpperBound(0); ctr++) {
             values.SetValue(value, ctr);
             value *= 2;
          }
          
          // Display values.
          for (int ctr = values.GetLowerBound(0); ctr <= values.GetUpperBound(0); ctr++)
             Console.Write("{0}    ", values.GetValue(ctr));
       }
    }
    // The example displays the following output:
    //        2    4    8    16    32    64    128    256    512    1024
    
    Module Example
       Public Sub Main()
          Dim values = Array.CreateInstance(GetType(Integer), { 10 }, { 1 })
          Dim value As Integer = 2
          ' Assign values.
          For ctr As Integer = values.GetLowerBound(0) To values.GetUpperBound(0)
             values(ctr) = value
             value *= 2
          Next
          
          ' Display values.
          For ctr As Integer = values.GetLowerBound(0) To values.GetUpperBound(0)
             Console.Write("{0}    ", values(ctr))
          Next
       End Sub
    End Module
    ' The example displays the following output:
    '       2    4    8    16    32    64    128    256    512    1024
    

    Beachten Sie, dass beim Abrufen GetLowerBound der-Methode zum Abrufen des Start Index eines Arrays auch die Array.GetUpperBound(Int32) -Methode aufgerufen wird, um den Endindex abzurufen.Note that when you call the GetLowerBound method to get the starting index of an array, you should also call the Array.GetUpperBound(Int32) method to get its ending index.

  • Verwechseln eines Indexes und des Werts an diesem Index in einem numerischen Array oder einer Auflistung.Confusing an index and the value at that index in a numeric array or collection. Dieses Problem tritt normalerweise auf, foreach wenn die- C#Anweisung (in For Each ) oder die-Anweisung (in Visual Basic) verwendet wird.This issue usually occurs when using the foreach statement (in C#) or the For Each statement (in Visual Basic). Das Problem wird anhand des folgenden Beispiels veranschaulicht.The following example illustrates the problem.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          // Generate array of random values.
          int[] values = PopulateArray(5, 10);
          // Display each element in the array.
          foreach (var value in values)
             Console.Write("{0}   ", values[value]);
       }
    
       private static int[] PopulateArray(int items, int maxValue)
       {
          int[] values = new int[items];
          Random rnd = new Random();
          for (int ctr = 0; ctr < items; ctr++)
             values[ctr] = rnd.Next(0, maxValue + 1);   
    
          return values;                                                      
       }
    }
    // The example displays output like the following:
    //    6   4   4
    //    Unhandled Exception: System.IndexOutOfRangeException: 
    //    Index was outside the bounds of the array.
    //       at Example.Main()
    
    Module Example
       Public Sub Main()
          ' Generate array of random values.
          Dim values() As Integer = PopulateArray(5, 10)
          ' Display each element in the array.
          For Each value In values
             Console.Write("{0}   ", values(value))
          Next
       End Sub
       
       Private Function PopulateArray(items As Integer, 
                                      maxValue As Integer) As Integer()
          Dim values(items - 1) As Integer
          Dim rnd As New Random()
          For ctr As Integer = 0 To items - 1
             values(ctr) = rnd.Next(0, maxValue + 1)   
          Next    
          Return values                                                      
       End Function
    End Module
    ' The example displays output like the following:
    '    6   4   4
    '    Unhandled Exception: System.IndexOutOfRangeException: 
    '    Index was outside the bounds of the array.
    '       at Example.Main()
    

    Das Iterations Konstrukt gibt jeden Wert in einem Array oder einer Auflistung zurück, nicht seinen Index.The iteration construct returns each value in an array or collection, not its index. Um die Ausnahme auszuschließen, verwenden Sie diesen Code.To eliminate the exception, use this code.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          // Generate array of random values.
          int[] values = PopulateArray(5, 10);
          // Display each element in the array.
          foreach (var value in values)
             Console.Write("{0}   ", value);
       }
    
       private static int[] PopulateArray(int items, int maxValue)
       {
          int[] values = new int[items];
          Random rnd = new Random();
          for (int ctr = 0; ctr < items; ctr++)
             values[ctr] = rnd.Next(0, maxValue + 1);   
    
          return values;                                                      
       }
    }
    // The example displays output like the following:
    //        10   6   7   5   8
    
    Module Example
       Public Sub Main()
          ' Generate array of random values.
          Dim values() As Integer = PopulateArray(5, 10)
          ' Display each element in the array.
          For Each value In values
             Console.Write("{0}   ", value)
          Next
       End Sub
       
       Private Function PopulateArray(items As Integer, 
                                      maxValue As Integer) As Integer()
          Dim values(items - 1) As Integer
          Dim rnd As New Random()
          For ctr As Integer = 0 To items - 1
             values(ctr) = rnd.Next(0, maxValue + 1)   
          Next    
          Return values                                                      
       End Function
    End Module
    ' The example displays output like the following:
    '       10   6   7   5   8
    
  • Der DataView.Sort Eigenschaft wird ein Ungültiger Spaltenname bereitgestellt.Providing an invalid column name to the DataView.Sort property.

  • Verstoß gegen Thread Sicherheit.Violating thread safety. Vorgänge wie z. b. das StreamReader Lesen aus demselben Objekt, das StreamWriter schreiben in dasselbe Objekt aus mehreren Threads oder das Auflisten der Objekte in Hashtable einem aus verschiedenen Threads können eine IndexOutOfRangeException auslösen, wenn auf das Objekt nicht in einem Thread sichere Art und Weise.Operations such as reading from the same StreamReader object, writing to the same StreamWriter object from multiple threads, or enumerating the objects in a Hashtable from different threads can throw an IndexOutOfRangeException if the object isn't accessed in a thread-safe way. Diese Ausnahme ist in der Regel zeitweilig, da Sie auf einer Racebedingung basiert.This exception is typically intermittent because it relies on a race condition.

Die Verwendung von hart codierten Indexwerten zum Bearbeiten eines Arrays löst wahrscheinlich eine Ausnahme aus, wenn der Indexwert falsch oder ungültig ist, oder wenn die Größe des zu bearbeienden Arrays unerwartet ist.Using hard-coded index values to manipulate an array is likely to throw an exception if the index value is incorrect or invalid, or if the size of the array being manipulation is unexpected. Um zu verhindern, dass von einem IndexOutOfRangeException Vorgang eine Ausnahme ausgelöst wird, können Sie folgende Aktionen ausführen:To prevent an operation from throwing an IndexOutOfRangeException exception, you can do the following:

  • Iterieren Sie die Elemente des Arrays mithilfe der foreach -Anweisung ( C#in) oder der for each-Anweisung... Nächstes Konstrukt (in Visual Basic) anstatt Elemente nach Index zu durchlaufen.Iterate the elements of the array using the foreach statement (in C#) or the For Each...Next construct (in Visual Basic) instead of iterating elements by index.

  • Iterieren Sie die Elemente nach Index, beginnend mit dem Index, Array.GetLowerBound der von der-Methode zurückgegeben wird, Array.GetUpperBound und mit dem von der-Methode zurückgegebenen Index.Iterate the elements by index starting with the index returned by the Array.GetLowerBound method and ending with the index returned by the Array.GetUpperBound method.

  • Wenn Sie Elemente in einem Array einem anderen Array zuweisen, stellen Sie sicher, dass das Ziel Array über mindestens so viele Elemente wie das Quell Array verfügt Array.Length , indem Sie die zugehörigen Eigenschaften vergleichen.If you are assigning elements in one array to another, ensure that the target array has at least as many elements as the source array by comparing their Array.Length properties.

Eine Liste der anfänglichen Eigenschaftswerte für eine Instanz von IndexOutOfRangeException, finden Sie unter den IndexOutOfRangeException Konstruktoren.For a list of initial property values for an instance of IndexOutOfRangeException, see the IndexOutOfRangeException constructors.

Die folgenden Anweisungen IndexOutOfRangeExceptionder zwischen Sprache (IL) lösen Folgendes aus:The following intermediate language (IL) instructions throw IndexOutOfRangeException:

  • ldelta em. <> eingebenldelem.<type>

  • ldelta-ldelema

  • stelem.<type>stelem.<type>

IndexOutOfRangeExceptionverwendet das HRESULT-COR_E_INDEXOUTOFRANGE, das den Wert 0x80131508 aufweist.IndexOutOfRangeException uses the HRESULT COR_E_INDEXOUTOFRANGE, which has the value 0x80131508.

Konstruktoren

IndexOutOfRangeException() IndexOutOfRangeException() IndexOutOfRangeException() IndexOutOfRangeException()

Initialisiert eine neue Instanz der IndexOutOfRangeException-Klasse.Initializes a new instance of the IndexOutOfRangeException class.

IndexOutOfRangeException(String) IndexOutOfRangeException(String) IndexOutOfRangeException(String) IndexOutOfRangeException(String)

Initialisiert eine neue Instanz der IndexOutOfRangeException-Klasse mit einer angegebenen Fehlermeldung.Initializes a new instance of the IndexOutOfRangeException class with a specified error message.

IndexOutOfRangeException(String, Exception) IndexOutOfRangeException(String, Exception) IndexOutOfRangeException(String, Exception) IndexOutOfRangeException(String, Exception)

Initialisiert eine neue Instanz der IndexOutOfRangeException-Klasse mit einer angegebenen Fehlermeldung und einem Verweis auf die innere Ausnahme, die diese Ausnahme ausgelöst hat.Initializes a new instance of the IndexOutOfRangeException class with a specified error message and a reference to the inner exception that is the cause of this exception.

Eigenschaften

Data Data Data Data

Ruft eine Auflistung von Schlüssel-Wert-Paaren ab, die zusätzliche benutzerdefinierte Informationen über die Ausnahme bereitstellen.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Inherited from Exception)
HelpLink HelpLink HelpLink HelpLink

Ruft einen Link zur Hilfedatei ab, die dieser Ausnahme zugeordnet ist, oder legt einen Link fest.Gets or sets a link to the help file associated with this exception.

(Inherited from Exception)
HResult HResult HResult HResult

Ruft HRESULT ab oder legt HRESULT fest. Dies ist ein codierter Wert, der einer bestimmten Ausnahme zugeordnet ist.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Inherited from Exception)
InnerException InnerException InnerException InnerException

Ruft die Exception-Instanz ab, die die aktuelle Ausnahme verursacht hat.Gets the Exception instance that caused the current exception.

(Inherited from Exception)
Message Message Message Message

Ruft eine Meldung ab, die die aktuelle Ausnahme beschreibt.Gets a message that describes the current exception.

(Inherited from Exception)
Source Source Source Source

Gibt den Namen der Anwendung oder des Objekts zurück, die bzw. das den Fehler verursacht hat, oder legt diesen fest.Gets or sets the name of the application or the object that causes the error.

(Inherited from Exception)
StackTrace StackTrace StackTrace StackTrace

Ruft eine Zeichenfolgendarstellung der unmittelbaren Frames in der Aufrufliste ab.Gets a string representation of the immediate frames on the call stack.

(Inherited from Exception)
TargetSite TargetSite TargetSite TargetSite

Ruft die Methode ab, die die aktuelle Ausnahme auslöst.Gets the method that throws the current exception.

(Inherited from Exception)

Methoden

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetBaseException() GetBaseException() GetBaseException() GetBaseException()

Gibt beim Überschreiben in einer abgeleiteten Klasse eine Exception zurück, die die ursprüngliche Ursache für eine oder mehrere nachfolgende Ausnahmen ist.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Inherited from Exception)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fungiert als Standardhashfunktion.Serves as the default hash function.

(Inherited from Object)
GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext)

Legt beim Überschreiben in einer abgeleiteten Klasse die SerializationInfo mit Informationen über die Ausnahme fest.When overridden in a derived class, sets the SerializationInfo with information about the exception.

(Inherited from Exception)
GetType() GetType() GetType() GetType()

Ruft den Laufzeittyp der aktuellen Instanz ab.Gets the runtime type of the current instance.

(Inherited from Exception)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Erstellt eine Zeichenfolgendarstellung der aktuellen Ausnahme und gibt diese zurück.Creates and returns a string representation of the current exception.

(Inherited from Exception)

Ereignisse

SerializeObjectState SerializeObjectState SerializeObjectState SerializeObjectState

Tritt auf, wenn eine Ausnahme serialisiert wird, um ein Ausnahmezustandsobjekt mit serialisierten Daten über die Ausnahme zu erstellen.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Inherited from Exception)

Gilt für:

Siehe auch