IndexOutOfRangeException 클래스

정의

해당 범위 외부에 있는 인덱스를 사용하여 배열 또는 컬렉션의 요소에 액세스하려고 할 때 발생하는 예외입니다.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
상속
IndexOutOfRangeException
특성

설명

IndexOutOfRangeException 잘못 된 인덱스가 배열 또는 컬렉션의 멤버에 액세스 하거나 버퍼의 특정 위치에서 읽거나 쓰는를 사용 하는 경우 예외가 throw 됩니다.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. 이 예외에서 상속 된 Exception 클래스에는 있지만 고유한 멤버가 추가 합니다.This exception inherits from the Exception class but adds no unique members.

일반적으로 IndexOutOfRangeException 개발자 오류 결과로 예외가 throw 됩니다.Typically, an IndexOutOfRangeException exception is thrown as a result of developer error. 대신 예외를 처리 하면 오류의 원인을 진단 하 고 코드를 수정 해야 합니다.Instead of handling the exception, you should diagnose the cause of the error and correct your code. 오류의 가장 일반적인 원인은 다음과 같습니다.The most common causes of the error are:

  • 다음 예제와 같이 멤버 또는 요소를 해당 개수 보다 작거나 컬렉션의 첫 번째 열 상한 하나 임을 무시 보여 줍니다.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()
    

    오류를 해결 하려면 다음과 같은 코드를 사용할 수 있습니다.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'
    

    또는 해당 인덱스에서 배열의 모든 요소를 반복을 대신 사용할 수는 foreach 문 (C#) 또는 For Each 문 (Visual Basic).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).

  • 에 다른 배열 하는 되어 적절 하 게 차원이 구분 되지 않습니다 및 원래 배열 보다 적은 요소가 있는 배열 요소를 할당 하려고 합니다.Attempting to assign an array element to another array that has not been adequately dimensioned and that has fewer elements than the original array. 마지막 요소를 할당 하려면 다음 예제에서는 합니다 value1 의 같은 요소를 배열 합니다 value2 배열.The following example attempts to assign the last element in the value1 array to the same element in the value2 array. 그러나는 value2 배열에 된 차원이 제대로 구분 되지 7 개 요소 대신 6 개 있어야 합니다.However, the value2 array has been incorrectly dimensioned to have six instead of seven elements. 결과적으로, 할당 throw는 IndexOutOfRangeException 예외입니다.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()
    
  • 배열 또는 특정 인덱스 위치에서 시작 하는 컬렉션의 일부를 반복 하는 검색 메서드에서 반환 값을 사용 하 여.Using a value returned by a search method to iterate a portion of an array or collection starting at a particular index position. 런타임에서 throw 검색 작업에 일치 항목을 찾을 수 있는지 여부를 확인 해야 하는 경우는 IndexOutOfRangeException 이 예와 같이 예외입니다.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()
    

    이 경우에 List<T>.IndexOf 일치 항목을 찾지 못하면 잘못 된 인덱스 값에는-1을 반환 합니다.In this case, the List<T>.IndexOf method returns -1, which is an invalid index value, when it fails to find a match. 이 오류를 해결 하려면이 예와 같이 배열 반복 하기 전에 검색 메서드의 반환 값을 확인 합니다.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.
    
  • 사용 하 여 또는 열거 결과 집합, 컬렉션 또는 배열 쿼리에서 반환된 된 개체에 유효한 데이터가 있는지 여부를 테스트 하지 않고 반환 하려고 합니다.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.

  • 시작, 끝 인덱스를 인덱스나 반복할 항목의 수를 정의 하는 계산된 값을 사용 합니다.Using a computed value to define the starting index, the ending index, or the number of items to be iterated. 계산의 결과가 예기치 않은 경우 발생할 수 있는 IndexOutOfRangeException 예외입니다.If the result of the computation is unexpected, it might result in an IndexOutOfRangeException exception. 인덱스 값을 계산 하면 프로그램의 논리를 검사 하 고 값 배열 또는 컬렉션을 반복 하기 전에 유효성을 검사 해야 합니다.You should check your program's logic in calculating the index value and validate the value before iterating the array or collection. 다음 조건이 모두 true 여야 합니다. 그렇지 않은 경우는 IndexOutOfRangeException 예외가 throw 됩니다.The following conditions must all be true; otherwise, an IndexOutOfRangeException exception is thrown:

    • 시작 인덱스는 보다 크거나 같아야 합니다. Array.GetLowerBound 반복 하려는 배열의 차원에 대 한 또는 컬렉션에 대해 0 보다 크거나 합니다.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.

    • 끝 인덱스를 초과할 수 없습니다 Array.GetUpperBound 반복 또는 보다 클 수 없거나 같음 하려는 배열의 차원에 대 한는 Count 컬렉션의 속성입니다.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.

    • 다음 수식을 반복 하려는 배열의 차원에 대 한 참 이어야 합니다.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  
      

      컬렉션에 대해 다음 수식을 적용 되어야 합니다.For a collection, the following equation must be true:

      start_index >= 0 And start_index + items_to_iterate <= Count  
      

      배열 또는 컬렉션의 시작 인덱스는 음수일 수 없습니다.The starting index of an array or collection can never be a negative number.

  • 배열의 0부터 시작 해야 하는 것으로 가정 합니다.Assuming that an array must be zero-based. 0부터 시작 하지 않는 배열을 만들 수 있습니다는 Array.CreateInstance(Type, Int32[], Int32[]) 메서드는 CLS 규격이 아닌 있지만 COM interop를 반환할 수 있습니다.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. 다음 예제는 IndexOutOfRangeException 에서 생성 하는 비 0 기반 배열 반복 하려고 할 때 throw 되는 Array.CreateInstance(Type, Int32[], Int32[]) 메서드.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()
    

    다음 예제와 같이 오류를 해결 하려면 호출할 수 있습니다를 GetLowerBound 메서드 대신 배열의 시작 인덱스에 대 한 가정을 합니다.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
    

    문의할 때는 GetLowerBound 메서드는 배열의 시작 인덱스를 호출 해야는 Array.GetUpperBound(Int32) 메서드 끝 인덱스를 합니다.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.

  • 인덱스 및 해당 인덱스는 숫자 배열 또는 컬렉션에 있는 값이 혼동을 줄.Confusing an index and the value at that index in a numeric array or collection. 이 문제는 일반적으로 사용 하는 경우 발생 합니다 foreach 문 (C#) 또는 For Each 문 (Visual Basic).This issue usually occurs when using the foreach statement (in C#) or the For Each statement (in Visual Basic). 다음 예제에서 이 문제를 보여줍니다.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()
    

    반복 구문을 인덱스가 배열 또는 컬렉션에서 각 값을 반환합니다.The iteration construct returns each value in an array or collection, not its index. 예외를 제거 하려면이 코드를 사용 합니다.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
    
  • 에 잘못 된 열 이름을 제공 하는 DataView.Sort 속성입니다.Providing an invalid column name to the DataView.Sort property.

  • 스레드로부터의 안전성을 위반 합니다.Violating thread safety. 같은 읽기 등의 작업 StreamReader 개체를 동일 하 게 작성 StreamWriter 여러 스레드에서 개체 또는 개체를 열거를 Hashtable 다른 스레드에서 throw 할 수는 IndexOutOfRangeException 개체에 액세스 되지 경우는 스레드로부터 안전한 방법입니다.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. 이 예외는 경합 조건에 사용 하기 때문에 일반적으로 간헐적으로 발생 합니다.This exception is typically intermittent because it relies on a race condition.

인덱스 값이 잘못 되었거나 잘못 된 경우 또는 조작 중인 배열의 크기에 예기치 않은 경우 예외를 throw 할 경우 하드 코드 된 인덱스 값을 사용 하 여 배열을 조작합니다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. throw 작업을 방지 하기 위해는 IndexOutOfRangeException 예외, 다음을 수행할 수 있습니다.To prevent an operation from throwing an IndexOutOfRangeException exception, you can do the following:

  • 사용 하 여 배열 요소를 반복 합니다 foreach 문 (C#) 또는 각각에 대 한 중... 다음 인덱스로 요소를 반복 하는 대신 (Visual Basic)에서는 생성 합니다.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.

  • 반환 하는 인덱스를 사용 하 여 시작 하는 인덱스에서 요소를 반복 합니다 Array.GetLowerBound 메서드와에서 반환 하는 인덱스를 사용 하 여 종료를 Array.GetUpperBound 메서드.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.

  • 다른 하나는 배열에서 요소를 지정 하는 경우를 갖도록 대상 배열 이상의 요소 소스 배열과 비교 하 여 해당 Array.Length 속성입니다.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.

인스턴스의 초기 속성 값의 목록을 IndexOutOfRangeException, 참조는 IndexOutOfRangeException 생성자입니다.For a list of initial property values for an instance of IndexOutOfRangeException, see the IndexOutOfRangeException constructors.

다음 IL (중간 언어) 지침을 throw IndexOutOfRangeException:The following intermediate language (IL) instructions throw IndexOutOfRangeException:

  • ldelem.<type>ldelem.<type>

  • ldelemaldelema

  • stelem.<type>stelem.<type>

IndexOutOfRangeException 값 0x80131508 HRESULT COR_E_INDEXOUTOFRANGE를 사용 합니다.IndexOutOfRangeException uses the HRESULT COR_E_INDEXOUTOFRANGE, which has the value 0x80131508.

생성자

IndexOutOfRangeException()

IndexOutOfRangeException 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the IndexOutOfRangeException class.

IndexOutOfRangeException(String)

지정된 오류 메시지를 사용하여 IndexOutOfRangeException 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the IndexOutOfRangeException class with a specified error message.

IndexOutOfRangeException(String, Exception)

지정된 오류 메시지와 해당 예외의 원인인 내부 예외에 대한 참조를 사용하여 IndexOutOfRangeException 클래스의 새 인스턴스를 초기화합니다.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.

속성

Data

예외에 대한 사용자 정의 추가 정보를 제공하는 키/값 쌍의 컬렉션을 가져옵니다.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(다음에서 상속됨 Exception)
HelpLink

이 예외와 연결된 도움말 파일에 대한 링크를 가져오거나 설정합니다.Gets or sets a link to the help file associated with this exception.

(다음에서 상속됨 Exception)
HResult

특정 예외에 할당된 코드화된 숫자 값인 HRESULT를 가져오거나 설정합니다.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(다음에서 상속됨 Exception)
InnerException

현재 예외를 발생시킨 Exception 인스턴스를 가져옵니다.Gets the Exception instance that caused the current exception.

(다음에서 상속됨 Exception)
Message

현재 예외를 설명하는 메시지를 가져옵니다.Gets a message that describes the current exception.

(다음에서 상속됨 Exception)
Source

오류를 발생시키는 애플리케이션 또는 개체의 이름을 가져오거나 설정합니다.Gets or sets the name of the application or the object that causes the error.

(다음에서 상속됨 Exception)
StackTrace

호출 스택의 직접 실행 프레임에 대한 문자열 표현을 가져옵니다.Gets a string representation of the immediate frames on the call stack.

(다음에서 상속됨 Exception)
TargetSite

현재 예외를 throw하는 메서드를 가져옵니다.Gets the method that throws the current exception.

(다음에서 상속됨 Exception)

메서드

Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
GetBaseException()

파생 클래스에서 재정의되었을 때, 하나 이상의 후속 예외의 근본 원인이 되는 Exception을 반환합니다.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(다음에서 상속됨 Exception)
GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetObjectData(SerializationInfo, StreamingContext)

파생 클래스에서 재정의될 때, 예외에 관한 정보를 SerializationInfo에 설정합니다.When overridden in a derived class, sets the SerializationInfo with information about the exception.

(다음에서 상속됨 Exception)
GetType()

현재 인스턴스의 런타임 형식을 가져옵니다.Gets the runtime type of the current instance.

(다음에서 상속됨 Exception)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
ToString()

현재 예외에 대한 문자열 표현을 만들고 반환합니다.Creates and returns a string representation of the current exception.

(다음에서 상속됨 Exception)

이벤트

SerializeObjectState

예외에 대한 serialize된 데이터가 들어 있는 예외 상태 개체가 만들어지도록 예외가 serialize될 때 발생합니다.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(다음에서 상속됨 Exception)

적용 대상

추가 정보