ArgumentOutOfRangeException Sınıf
Tanım
Bir bağımsız değişkenin değeri, çağrılan yöntem tarafından tanımlanan izin verilen değer aralığının dışında olduğunda oluşturulan özel durum.The exception that is thrown when the value of an argument is outside the allowable range of values as defined by the invoked method.
public ref class ArgumentOutOfRangeException : ArgumentException
public class ArgumentOutOfRangeException : ArgumentException
[System.Serializable]
public class ArgumentOutOfRangeException : ArgumentException
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class ArgumentOutOfRangeException : ArgumentException
type ArgumentOutOfRangeException = class
inherit ArgumentException
type ArgumentOutOfRangeException = class
inherit ArgumentException
interface ISerializable
[<System.Serializable>]
type ArgumentOutOfRangeException = class
inherit ArgumentException
interface ISerializable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ArgumentOutOfRangeException = class
inherit ArgumentException
interface ISerializable
Public Class ArgumentOutOfRangeException
Inherits ArgumentException
- Devralma
- Devralma
- Öznitelikler
- Uygulamalar
Örnekler
Aşağıdaki örnek, davet edilen bir konuk hakkında bilgi içeren bir sınıfı tanımlar.The following example defines a class to contain information about an invited guest. Konuk 21 ' den küçükse, bir ArgumentOutOfRangeException özel durum oluşturulur.If the guest is younger than 21, an ArgumentOutOfRangeException exception is thrown.
using System;
class Program
{
static void Main(string[] args)
{
try
{
Guest guest1 = new Guest("Ben", "Miller", 17);
Console.WriteLine(guest1.GuestInfo());
}
catch (ArgumentOutOfRangeException outOfRange)
{
Console.WriteLine("Error: {0}", outOfRange.Message);
}
}
}
class Guest
{
private string FirstName;
private string LastName;
private int Age;
public Guest(string fName, string lName, int age)
{
FirstName = fName;
LastName = lName;
if (age < 21)
throw new ArgumentOutOfRangeException("age","All guests must be 21-years-old or older.");
else
Age = age;
}
public string GuestInfo()
{
string gInfo = FirstName + " " + LastName + ", " + Age.ToString();
return(gInfo);
}
}
Module Module1
Public Sub Main()
Try
Dim guest1 As Guest = New Guest("Ben", "Miller", 17)
Console.WriteLine(guest1.GuestInfo)
Catch outOfRange As ArgumentOutOfRangeException
Console.WriteLine("Error: {0}", outOfRange.Message)
End Try
End Sub
End Module
Class Guest
Private FirstName As String
Private LastName As String
Private Age As Integer
Public Sub New(ByVal fName As String, ByVal lName As String, ByVal age As Integer)
MyBase.New()
FirstName = fName
LastName = lName
If (age < 21) Then
Throw New ArgumentOutOfRangeException("age", "All guests must be 21-years-old or older.")
Else
age = age
End If
End Sub
Public Function GuestInfo() As String
Dim gInfo As String = (FirstName + (" " _
+ (Me.LastName + (", " + Me.Age.ToString))))
Return gInfo
End Function
End Class
Açıklamalar
ArgumentOutOfRangeExceptionBir yöntem çağrıldığında bir özel durum oluşur ve yönteme geçirilen bağımsız değişkenlerden en az biri değildir null ve bağımsız değişken için beklenen değerler kümesinin üyesi olmayan geçersiz bir değer içerir.An ArgumentOutOfRangeException exception is thrown when a method is invoked and at least one of the arguments passed to the method is not null and contains an invalid value that is not a member of the set of values expected for the argument. ParamNameÖzelliği geçersiz bağımsız değişkenini tanımlar ve ActualValue bir değer varsa özelliği geçersiz değeri tanımlar.The ParamName property identifies the invalid argument, and the ActualValue property, if a value is present, identifies the invalid value.
Genellikle, ArgumentOutOfRangeException Geliştirici hatasından kaynaklanan bir sonuçlardır.Typically, an ArgumentOutOfRangeException results from developer error. Özel durumu bir blokta işlemek yerine try / catch , özel durumun nedenini ortadan kaldırmanız gerekir veya bağımsız değişken, özel durumu oluşturan yönteme geçirilmeden önce Kullanıcı tarafından bir yöntem çağrısı veya girişi tarafından döndürülürse, bağımsız değişkenleri yönteme geçirmeden önce doğrulamanız gerekir.Instead of handling the exception in a try/catch block, you should eliminate the cause of the exception or, if the argument is returned by a method call or input by the user before being passed to the method that throws the exception, you should validate arguments before passing them to the method.
ArgumentOutOfRangeException Şu şekilde kullanılır:ArgumentOutOfRangeException is used extensively by:
System.CollectionsVe ad alanlarındaki sınıflar System.IO .Classes in the System.Collections and System.IO namespaces.
Sınıftaki dize düzenleme yöntemleri String .String manipulation methods in the String class.
Bir ArgumentOutOfRangeException özel durumun oluşturulduğu koşullar şunları içerir:The conditions in which an ArgumentOutOfRangeException exception is thrown include the following:
Bir koleksiyonun üyesini dizin numarasına göre alıyor ve Dizin numarası geçersiz.You are retrieving the member of a collection by its index number, and the index number is invalid.
Bu, bir özel durumun en yaygın nedendir ArgumentOutOfRangeException .This is the most common cause of an ArgumentOutOfRangeException exception. Genellikle, dizin numarası dört nedenden biri için geçersizdir:Typically, the index number is invalid for one of four reasons:
Koleksiyonda üye yok ve kodunuz olduğunu varsayar.The collection has no members, and your code assumes that it does. Aşağıdaki örnek, hiçbir öğesi olmayan bir koleksiyonun ilk öğesini almaya çalışır:The following example attempts to retrieve the first element of a collection that has no elements:
using System; using System.Collections.Generic; public class Example { public static void Main() { var list = new List<String>(); Console.WriteLine("Number of items: {0}", list.Count); try { Console.WriteLine("The first item: '{0}'", list[0]); } catch (ArgumentOutOfRangeException e) { Console.WriteLine(e.Message); } } } // The example displays the following output: // Number of items: 0 // Index was out of range. Must be non-negative and less than the size of the collection. // Parameter name: indexImports System.Collections.Generic Module Example Public Sub Main() Dim list As New List(Of String) Console.WriteLine("Number of items: {0}", list.Count) Try Console.WriteLine("The first item: '{0}'", list(0)) Catch e As ArgumentOutOfRangeException Console.WriteLine(e.Message) End Try End Sub End Module ' The example displays the following output: ' Number of items: 0 ' Index was out of range. Must be non-negative and less than the size of the collection. ' Parameter name: indexÖzel durumu engellemek için,
CountAşağıdaki kod parçası olduğu gibi, herhangi bir üyeyi almayı denemeden önce koleksiyonun özelliğinin sıfırdan büyük olup olmadığını kontrol edin.To prevent the exception, check whether the collection'sCountproperty is greater than zero before attempting to retrieve any members, as the following code fragment does.if (list.Count > 0) Console.WriteLine("The first item: '{0}'", list[0]);If list.Count > 0 Then Console.WriteLine("The first item: '{0}'", list(0)) End IfBazı durumlarda özel durum,
AddBu amaçla var olan gibi yöntemi çağırmak yerine, varolmayan bir dizin kullanarak bir koleksiyona üye eklemeye çalıştığınız için ortaya çıkabilir.In some cases, the exception may occur because you are attempting to add a member to a collection by using an index that does not exist, rather than by calling the method, such asAdd, that exists for this purpose. Aşağıdaki örnek, yöntemi çağırmak yerine var olmayan bir dizin kullanarak bir koleksiyona bir öğe eklemeye çalışır List<T>.Add .The following example attempts to add an element to a collection by using a non-existent index rather than calling the List<T>.Add method.using System; using System.Collections.Generic; public class Example { public static void Main() { var numbers = new List<int>(); numbers.AddRange( new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20 } ); var squares = new List<int>(); for (int ctr = 0; ctr < numbers.Count; ctr++) squares[ctr] = (int) Math.Pow(numbers[ctr], 2); } } // The example displays the following output: // 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.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) // at Example.Main()Imports System.Collections.Generic Module Example Public Sub Main() Dim numbers As New List(Of Integer) numbers.AddRange( { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 20 } ) Dim squares As New List(Of Integer) For ctr As Integer = 0 To numbers.Count - 1 squares(ctr) = CInt(numbers(ctr) ^ 2) Next End Sub End Module ' The example displays the following output: ' 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.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) ' at Example.Main()Aşağıdaki kod parçası bu hatayı düzeltir:The following code fragment corrects this error:
var squares = new List<int>(); for (int ctr = 0; ctr < numbers.Count; ctr++) squares.Add((int) Math.Pow(numbers[ctr], 2));Dim squares As New List(Of Integer) For ctr As Integer = 0 To numbers.Count - 1 squares.Add(CInt(numbers(ctr) ^ 2)) NextDizini negatif olan bir öğeyi almaya çalışıyorsunuz.You're attempting to retrieve an item whose index is negative. Bu durum genellikle belirli bir öğenin dizini için bir koleksiyon ararken ve aramanın başarılı olduğunu varsaydığı için oluşur.This usually occurs because you've searched a collection for the index of a particular element and have erroneously assumed that the search is successful. Aşağıdaki örnekte, yöntemine yapılan çağrı List<T>.FindIndex(Predicate<T>) "Z" ile eşit bir dize bulamaz ve bu nedenle-1 döndürür.In the following example, the call to the List<T>.FindIndex(Predicate<T>) method fails to find a string equal to "Z" and so returns -1. Ancak, bu geçersiz bir dizin değeridir.However, this is an invalid index value.
using System; using System.Collections.Generic; public class Example { public static void Main() { var list = new List<String>(); list.AddRange( new String[] { "A", "B", "C" } ); // Get the index of the element whose value is "Z". int index = list.FindIndex((new StringSearcher("Z")).FindEquals); try { Console.WriteLine("Index {0} contains '{1}'", index, list[index]); } catch (ArgumentOutOfRangeException e) { Console.WriteLine(e.Message); } } } internal class StringSearcher { String value; public StringSearcher(String value) { this.value = value; } public bool FindEquals(String s) { return s.Equals(value, StringComparison.InvariantCulture); } } // The example displays the following output: // Index was out of range. Must be non-negative and less than the size of the collection. // Parameter name: indexImports System.Collections.Generic Module Example Public Sub Main() Dim list As New List(Of String) list.AddRange( { "A", "B", "C" } ) ' Get the index of the element whose value is "Z". Dim index As Integer = list.FindIndex(AddressOf (New StringSearcher("Z")).FindEquals) Try Console.WriteLine("Index {0} contains '{1}'", index, list(index)) Catch e As ArgumentOutOfRangeException Console.WriteLine(e.Message) End Try End Sub End Module Friend Class StringSearcher Dim value As String Public Sub New(value As String) Me.value = value End Sub Public Function FindEquals(s As String) As Boolean Return s.Equals(value, StringComparison.InvariantCulture) End Function End Class ' The example displays the following output: ' Index was out of range. Must be non-negative and less than the size of the collection. ' Parameter name: indexÖzel durumu engellemek için, aşağıdaki kod parçası olduğundan, döndürülen dizinin koleksiyondan öğeyi almayı denemeden önce sıfıra eşit veya daha büyük olduğundan emin olun.To prevent the exception, check that the search is successful by making sure that the returned index is greater than or equal to zero before attempting to retrieve the item from the collection, as the following code fragment does.
// Get the index of the element whose value is "Z". int index = list.FindIndex((new StringSearcher("Z")).FindEquals); if (index >= 0) Console.WriteLine("'Z' is found at index {0}", list[index]);' Get the index of the element whose value is "Z". Dim index As Integer = list.FindIndex(AddressOf (New StringSearcher("Z")).FindEquals) If index >= 0 Then Console.WriteLine("Index {0} contains '{1}'", index, list(index)) End IfAşağıdaki örnekte gösterildiği gibi, dizini koleksiyonun özelliğinin değerine eşit olan bir öğeyi almaya çalışıyorsunuz
Count.You're attempting to retrieve an element whose index is equal to the value of the collection'sCountproperty, as the following example illustrates.using System; using System.Collections.Generic; public class Example { public static void Main() { var list = new List<String>(); list.AddRange( new String[] { "A", "B", "C" } ); try { // Display the elements in the list by index. for (int ctr = 0; ctr <= list.Count; ctr++) Console.WriteLine("Index {0}: {1}", ctr, list[ctr]); } catch (ArgumentOutOfRangeException e) { Console.WriteLine(e.Message); } } } // The example displays the following output: // Index 0: A // Index 1: B // Index 2: C // Index was out of range. Must be non-negative and less than the size of the collection. // Parameter name: indexImports System.Collections.Generic Module Example Public Sub Main() Dim list As New List(Of String) list.AddRange( { "A", "B", "C" } ) Try ' Display the elements in the list by index. For ctr As Integer = 0 To list.Count Console.WriteLine("Index {0}: {1}", ctr, list(ctr)) Next Catch e As ArgumentOutOfRangeException Console.WriteLine(e.Message) End Try End Sub End Module ' The example displays the following output: ' Index 0: A ' Index 1: B ' Index 2: C ' Index was out of range. Must be non-negative and less than the size of the collection. ' Parameter name: index.NET 'teki koleksiyonlar sıfır tabanlı dizin oluşturma kullandığından, koleksiyonun ilk öğesi dizin 0 ' dır ve son öğe index
Count-1 ' dir.Because collections in .NET use zero-based indexing, the first element of the collection is at index 0, and the last element is at indexCount- 1.CountAşağıdaki kodun yaptığı gibi, index-1 konumundaki son öğeye erişmenizi sağlayarak hatayı ortadan kaldırabilirsiniz.You can eliminate the error by ensuring that you access the last element at indexCount- 1, as the following code does.// Display the elements in the list by index. for (int ctr = 0; ctr < list.Count; ctr++) Console.WriteLine("Index {0}: {1}", ctr, list[ctr]);' Display the elements in the list by index. For ctr As Integer = 0 To list.Count - 1 Console.WriteLine("Index {0}: {1}", ctr, list(ctr)) Next
Bir dize işleme yöntemi çağırarak bir dize işlemi gerçekleştirmeye çalışıyorsunuz ve başlangıç dizini dizede yok.You are attempting to perform a string operation by calling a string manipulation method, and the starting index does not exist in the string.
,,,,,,, Veya gibi yöntemlerin aşırı yüklemeleri, örneğin,,,,,,,, String.Compare String.CompareOrdinal String.IndexOf IndexOfAny String.Insert String.LastIndexOf String.LastIndexOfAny Remove veya String.Substring işlemin başlangıç dizinini belirtmenize izin veren, dizinin içinde geçerli bir konum olmasını gerektirir.Overloads of methods such as such as String.Compare, String.CompareOrdinal, String.IndexOf, IndexOfAny, String.Insert, String.LastIndexOf, String.LastIndexOfAny, Remove, or String.Substring that allow you to specify the starting index of the operation require that the index be a valid position within the string. Geçerli dizinler 0 ile String.Length -1 arasındadır.Valid indexes range from 0 to String.Length - 1.
Bu özel durumun dört yaygın nedeni vardır ArgumentOutOfRangeException :There are four common causes of this ArgumentOutOfRangeException exception:
Boş bir dize veya ile çalışıyorsunuz String.Empty .You are working with an empty string, or String.Empty. String.LengthÖzelliği 0 döndürdüğünden, onu dizine göre işleme girişimleri bir ArgumentOutOfRangeException özel durum oluşturur.Because its String.Length property returns 0, any attempt to manipulate it by index throws an ArgumentOutOfRangeException exception. Aşağıdaki örnek,
GetFirstCharacterbir dizenin ilk karakterini döndüren bir yöntemi tanımlar.The following example, defines aGetFirstCharactermethod that returns the first character of a string. Dize boşsa, yöntemine geçirilen son dize, yöntemi ise bir ArgumentOutOfRangeException özel durum oluşturur.If the string is empty, as the final string passed to the method is, the method throws an ArgumentOutOfRangeException exception.using System; public class Example { public static void Main() { String[] words = { "the", "today", "tomorrow", " ", "" }; foreach (var word in words) Console.WriteLine("First character of '{0}': '{1}'", word, GetFirstCharacter(word)); } private static char GetFirstCharacter(String s) { return s[0]; } } // The example displays the following output: // First character of //the//: //t// // First character of //today//: //t// // First character of //tomorrow//: //t// // First character of // //: // // // // Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array. // at Example.Main()Module Example Public Sub Main() Dim words() As String = { "the", "today", "tomorrow", " ", "" } For Each word In words Console.WriteLine("First character of '{0}': '{1}'", word, GetFirstCharacter(word)) Next End Sub Private Function GetFirstCharacter(s As String) As Char Return s(0) End Function End Module ' The example displays the following output: ' First character of 'the': 't' ' First character of 'today': 't' ' First character of 'tomorrow': 't' ' First character of ' ': ' ' ' ' Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array. ' at Example.Main()Dizenin sıfırdan büyük olup olmadığını test ederek String.Length veya IsNullOrEmpty dizenin olmaması veya boş olduğundan emin olmak için yöntemini çağırarak özel durumu ortadan kaldırabilirsiniz
null.You can eliminate the exception by testing whether the string's String.Length is greater than zero or by calling the IsNullOrEmpty method to ensure that the string is notnullor empty. Aşağıdaki kod parçası, ikincisini yapar.The following code fragment does the latter. Bu durumda, dizenullveya boşsa,GetFirstCharacterYöntem U + 0000 döndürür.In this case, if the string isnullor empty, theGetFirstCharactermethod returns U+0000.static char GetFirstCharacter(String s) { if (String.IsNullOrEmpty(s)) return '\u0000'; else return s[0]; }Function GetFirstCharacter(s As String) As Char If String.IsNullOrEmpty(s) Then Return ChrW(0) Else Return s(0) End If End FunctionBir dizeyi o dizedeki bir alt dizenin konumuna göre düzenleme işlemi yaptınız ve alt dizenin gerçekten bulunup bulunmadığını belirlemediniz.You're manipulating a string based on the position of a substring within that string, and you've failed to determine whether the substring was actually found.
Aşağıdaki örnek iki sözcüklü bir tümceciğin ikinci sözcüğünü ayıklar.The following example extracts the second word of a two-word phrase. ArgumentOutOfRangeExceptionTümcecik yalnızca bir sözcükten oluşuyorsa ve bu nedenle gömülü bir boşluk karakteri içermiyorsa bir özel durum oluşturur.It throws an ArgumentOutOfRangeException exception if the phrase consists of only one word, and therefore does not contain an embedded space character. Bunun nedeni, yöntemin çağrısının başarısız olduğunu String.IndexOf(String) belirtmek için-1 döndüğü ve bu geçersiz değerin yönteme geçirildiği anlamına gelir String.Substring(Int32) .This occurs because the call to the String.IndexOf(String) method returns -1 to indicate that the search failed, and this invalid value is then passed to the String.Substring(Int32) method.
using System; public class Example { public static void Main() { String[] phrases = { "ocean blue", "concerned citizen", "runOnPhrase" }; foreach (var phrase in phrases) Console.WriteLine("Second word is {0}", GetSecondWord(phrase)); } static String GetSecondWord(String s) { int pos = s.IndexOf(" "); return s.Substring(pos).Trim(); } } // The example displays the following output: // Second word is blue // Second word is citizen // // Unhandled Exception: System.ArgumentOutOfRangeException: StartIndex cannot be less than zero. // Parameter name: startIndex // at System.String.Substring(Int32 startIndex, Int32 length) // at Example.GetSecondWord(String s) // at Example.Main()Module Example Public Sub Main() Dim phrases() As String = { "ocean blue", "concerned citizen", "runOnPhrase" } For Each phrase In phrases Console.WriteLine("Second word is {0}", GetSecondWord(phrase)) Next End Sub Function GetSecondWord(s As String) As String Dim pos As Integer = s.IndexOf(" ") Return s.Substring(pos).Trim() End Function End Module ' The example displays the following output: ' Second word is blue ' Second word is citizen ' ' Unhandled Exception: System.ArgumentOutOfRangeException: StartIndex cannot be less than zero. ' Parameter name: startIndex ' at System.String.Substring(Int32 startIndex, Int32 length) ' at Example.GetSecondWord(String s) ' at Example.Main()Özel durumu ortadan kaldırmak için, dize arama yöntemi tarafından döndürülen değeri dize işleme yöntemi çağrılmadan önce doğrulayın.To eliminate the exception, validate the value returned by the string search method before calling the string manipulation method.
using System; public class Example { public static void Main() { String[] phrases = { "ocean blue", "concerned citizen", "runOnPhrase" }; foreach (var phrase in phrases) { String word = GetSecondWord(phrase); if (! String.IsNullOrEmpty(word)) Console.WriteLine("Second word is {0}", word); } } static String GetSecondWord(String s) { int pos = s.IndexOf(" "); if (pos >= 0) return s.Substring(pos).Trim(); else return String.Empty; } } // The example displays the following output: // Second word is blue // Second word is citizenModule Example Public Sub Main() Dim phrases() As String = { "ocean blue", "concerned citizen", "runOnPhrase" } For Each phrase In phrases Dim word As String = GetSecondWord(phrase) If Not String.IsNullOrEmpty(word) Then _ Console.WriteLine("Second word is {0}", word) Next End Sub Function GetSecondWord(s As String) As String Dim pos As Integer = s.IndexOf(" ") If pos >= 0 Return s.Substring(pos).Trim() Else Return String.Empty End If End Function End Module ' The example displays the following output: ' Second word is blue ' Second word is citizenGeçerli dizenin aralığının dışında olan bir alt dizeyi çıkarmaya çalıştınız.You've attempted to extract a substring that is outside the range of the current string.
Alt dizeleri çıkaran Yöntemler, alt dizenin başlangıç konumunu ve dizenin sonuna kadar devam eden alt dizeler için, alt dizedeki karakter sayısını belirtmenizi gerektirir.The methods that extract substrings all require that you specify the starting position of the substring and, for substrings that do not continue to the end of the string, the number of characters in the substring. Bu, alt dizenin son karakterinin dizini değildir.Note that this is not the index of the last character in the substring.
ArgumentOutOfRangeExceptionBu durumda genellikle, alt dizeden karakter sayısını yanlış hesaplamış olduğunuz için bir özel durum oluşturulur.An ArgumentOutOfRangeException exception is typically thrown in this case because you've incorrectly calculated the number of characters in the substring. String.IndexOfBir alt dizenin başlangıç ve bitiş konumlarını tanımlamak için gibi bir arama yöntemi kullanıyorsanız:If you are using a search method like String.IndexOf to identify the starting and ending positions of a substring:
Tarafından döndürülen bitiş konumundaki karakter alt String.IndexOf dizeye dahil edilse, alt dizenin bitiş konumu formül tarafından verilirIf the character in the ending position returned by String.IndexOf is to be included in the substring, the ending position of the substring is given by the formula
endIndex - startIndex + 1Tarafından döndürülen bitiş konumundaki karakter alt String.IndexOf dizeden dışlanmazsa, alt dizenin bitiş konumu formül tarafından verilirIf the character in the ending position returned by String.IndexOf is to be excluded from the substring, the ending position of the substring is given by the formula
endIndex - startIndexAşağıdaki örnek,
FindWordsString.IndexOfAny(Char[], Int32) bir dizedeki boşluk karakterlerini ve noktalama işaretlerini belirlemek için yöntemini kullanan bir yöntemi tanımlar ve dizesinde bulunan kelimeleri içeren bir dizi döndürür.The following example defines aFindWordsmethod that uses the String.IndexOfAny(Char[], Int32) method to identify space characters and punctuation marks in a string and returns an array that contains the words found in the string.using System; using System.Collections.Generic; public class Example { public static void Main() { String sentence = "This is a simple, short sentence."; Console.WriteLine("Words in '{0}':", sentence); foreach (var word in FindWords(sentence)) Console.WriteLine(" '{0}'", word); } static String[] FindWords(String s) { int start = 0, end = 0; Char[] delimiters = { ' ', '.', ',', ';', ':', '(', ')' }; var words = new List<String>(); while (end >= 0) { end = s.IndexOfAny(delimiters, start); if (end >= 0) { if (end - start > 0) words.Add(s.Substring(start, end - start)); start = end + 1; } else { if (start < s.Length - 1) words.Add(s.Substring(start)); } } return words.ToArray(); } } // The example displays the following output: // Words in 'This is a simple, short sentence.': // 'This' // 'is' // 'a' // 'simple' // 'short' // 'sentence'Imports System.Collections.Generic Module Example Public Sub Main() Dim sentence As String = "This is a simple, short sentence." Console.WriteLine("Words in '{0}':", sentence) For Each word In FindWords(sentence) Console.WriteLine(" '{0}'", word) Next End Sub Function FindWords(s As String) As String() Dim start, ending As Integer Dim delimiters() As Char = { " "c, "."c, ","c, ";"c, ":"c, "("c, ")"c } Dim words As New List(Of String)() Do While ending >= 0 ending = s.IndexOfAny(delimiters, start) If ending >= 0 If ending - start > 0 Then words.Add(s.Substring(start, ending - start)) End If start = ending + 1 Else If start < s.Length - 1 Then words.Add(s.Substring(start)) End If End If Loop Return words.ToArray() End Function End Module ' The example displays the following output: ' Words in 'This is a simple, short sentence.': ' 'This' ' 'is' ' 'a' ' 'simple' ' 'short' ' 'sentence'
Yalnızca pozitif sayılar ve sıfır gerektiren bir bağımsız değişken içeren bir yönteme negatif bir sayı geçirtiniz ya da yalnızca pozitif sayılar gerektiren bir bağımsız değişkenle negatif bir sayı veya sıfır geçirtiniz.You have passed a negative number to a method with an argument that requires only positive numbers and zero, or you have passed either a negative number or zero to a method with an argument that requires only positive numbers.
Örneğin, Array.CreateInstance(Type, Int32, Int32, Int32) yöntemi iki boyutlu bir dizinin her boyutundaki öğelerin sayısını belirtmenizi gerektirir; her boyut için geçerli değerler 0 ile arasında değişebilir Int32.MaxValue .For example, the Array.CreateInstance(Type, Int32, Int32, Int32) method requires that you specify the number of elements in each dimension of a two-dimensional array; valid values for each dimension can range from 0 to Int32.MaxValue. Ancak aşağıdaki örnekteki boyut bağımsız değişkeni negatif bir değere sahip olduğundan, yöntem bir ArgumentOutOfRangeException özel durum oluşturur.But because the dimension argument in the following example has a negative value, the method throws an ArgumentOutOfRangeException exception.
using System; public class Example { public static void Main() { int dimension1 = 10; int dimension2 = -1; try { Array arr = Array.CreateInstance(typeof(String), dimension1, dimension2); } catch (ArgumentOutOfRangeException e) { if (e.ActualValue != null) Console.WriteLine("{0} is an invalid value for {1}: ", e.ActualValue, e.ParamName); Console.WriteLine(e.Message); } } } // The example displays the following output: // Non-negative number required. // Parameter name: length2Module Example Public Sub Main() Dim dimension1 As Integer = 10 Dim dimension2 As Integer = -1 Try Dim arr AS Array = Array.CreateInstance(GetType(String), dimension1, dimension2) Catch e As ArgumentOutOfRangeException If e.ActualValue IsNot Nothing Then Console.WriteLine("{0} is an invalid value for {1}: ", e.ActualValue, e.ParamName) End If Console.WriteLine(e.Message) End Try End Sub End Module ' The example displays the following output: ' Non-negative number required. ' Parameter name: length2Hatayı düzeltmek için, geçersiz bağımsız değişkenin değerinin negatif olmamasını sağlayın.To correct the error, ensure that the value of the invalid argument is non-negative. Aşağıdaki kod parçası olduğundan, bunu geçerli bir değer sağlayarak yapabilirsiniz.You can do this by providing a valid value, as the following code fragment does.
int dimension1 = 10; int dimension2 = 10; Array arr = Array.CreateInstance(typeof(String), dimension1, dimension2);Dim dimension1 As Integer = 10 Dim dimension2 As Integer = 10 Dim arr As Array = Array.CreateInstance(GetType(String), dimension1, dimension2)Ayrıca girişi doğrulayabilir ve eğer geçersizse, bazı işlemleri yapabilirsiniz.You can also validate the input and, if it is invalid, take some action. Aşağıdaki kod parçası yöntemi çağırmak yerine bir hata iletisi görüntüler.The following code fragment displays an error message instead of calling the method.
if (dimension1 < 0 || dimension2 < 0) { Console.WriteLine("Unable to create the array."); Console.WriteLine("Specify non-negative values for the two dimensions."); } else { arr = Array.CreateInstance(typeof(String), dimension1, dimension2); }If dimension1 < 0 OrElse dimension2 < 0 Then Console.WriteLine("Unable to create the array.") Console.WriteLine("Specify non-negative values for the two dimensions.") Else arr = Array.CreateInstance(GetType(String), dimension1, dimension2) End IfÇok iş parçacıklı olan veya zaman uyumsuz olarak yürütülen ve bir dizi ya da koleksiyonu güncelleştiren bir uygulamada yarış durumu vardır.A race condition exists in an app that is multithreaded or has tasks that execute asynchronously and that updates an array or collection.
Aşağıdaki örnek bir List<T> nesne koleksiyonunu doldurmak için bir nesnesi kullanır
Continent.The following example uses a List<T> object to populate a collection ofContinentobjects. Örnek, koleksiyon ArgumentOutOfRangeException tamamen doldurulmadan önce koleksiyonda yedi öğeyi görüntülemeye çalışırsa bir oluşturur.It throws an ArgumentOutOfRangeException if the example attempts to display the seven items in the collection before the collection is fully populated.using System; using System.Collections.Generic; using System.Threading; public class Continent { public String Name { get; set; } public int Population { get; set; } public Decimal Area { get; set; } } public class Example { static List<Continent> continents = new List<Continent>(); static String msg; public static void Main() { String[] names = { "Africa", "Antarctica", "Asia", "Australia", "Europe", "North America", "South America" }; // Populate the list. foreach (var name in names) { var th = new Thread(PopulateContinents); th.Start(name); } Console.WriteLine(msg); Console.WriteLine(); // Display the list. for (int ctr = 0; ctr < names.Length; ctr++) { var continent = continents[ctr]; Console.WriteLine("{0}: Area: {1}, Population {2}", continent.Name, continent.Population, continent.Area); } } private static void PopulateContinents(Object obj) { String name = obj.ToString(); msg += String.Format("Adding '{0}' to the list.\n", name); var continent = new Continent(); continent.Name = name; // Sleep to simulate retrieving remaining data. Thread.Sleep(50); continents.Add(continent); } } // The example displays output like the following: // Adding //Africa// to the list. // Adding //Antarctica// to the list. // Adding //Asia// to the list. // Adding //Australia// to the list. // Adding //Europe// to the list. // Adding //North America// to the list. // Adding //South America// to the list. // // // // 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.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) // at Example.Main()Imports System.Collections.Generic Imports System.Threading Public Class Continent Public Property Name As String Public Property Population As Integer Public Property Area As Decimal End Class Module Example Dim continents As New List(Of Continent) Dim msg As String Public Sub Main() Dim names() As String = { "Africa", "Antarctica", "Asia", "Australia", "Europe", "North America", "South America" } ' Populate the list. For Each name In names Dim th As New Thread(AddressOf PopulateContinents) th.Start(name) Next Console.WriteLine(msg) Console.WriteLine() ' Display the list. For ctr As Integer = 0 To names.Length - 1 Dim continent = continents(ctr) Console.WriteLine("{0}: Area: {1}, Population {2}", continent.Name, continent.Population, continent.Area) Next End Sub Private Sub PopulateContinents(obj As Object) Dim name As String = obj.ToString() msg += String.Format("Adding '{0}' to the list.{1}", name, vbCrLf) Dim continent As New Continent() continent.Name = name ' Sleep to simulate retrieving remaining data. Thread.Sleep(50) continents.Add(continent) End Sub End Module ' The example displays output like the following: ' Adding 'Africa' to the list. ' Adding 'Antarctica' to the list. ' Adding 'Asia' to the list. ' Adding 'Australia' to the list. ' Adding 'Europe' to the list. ' Adding 'North America' to the list. ' Adding 'South America' to the list. ' ' ' ' 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.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource) ' at Example.Main()Bu durumda, birden çok iş parçacığından iki kaynağa erişilir:In this case, two resources are accessed from multiple threads:
continentstopluluğu.Thecontinentscollection. List<T>.AddYöntemi birden çok iş parçacığından çağırılır.Its List<T>.Add method is called from multiple threads. Buna ek olarak, ana veya birincil iş parçacığı, üyelerin üyelerini yineleme sırasında yedi öğe ile tamamen doldurulmuş olduğunu varsayar.In addition, the main or primary thread assumes the collection is fully populated with seven elements when it iterates its members.msgBirden çok iş parçacığından birleştirilmiş dize.Themsgstring, which is concatenated from multiple threads.
Hatayı düzeltmek için, paylaşılan durumun aşağıdaki şekilde iş parçacığı güvenli bir şekilde erişilebilir olduğundan emin olun.To correct the error, ensure that shared state is accessed in a thread-safe way, as follows.
uygulamanız bir dizi veya koleksiyon nesnesi kullanıyorsa, System.Collections.Concurrent ad alanındaki veya bant dışı yayındaki türler gibi iş parçacığı güvenli bir koleksiyon sınıfı kullanmayı düşünün System.Collections.Immutable .if your app uses an array or collection object, consider using a thread-safe collection class, such as the types in the System.Collections.Concurrent namespace or the System.Collections.Immutable out-of-band release.
Paylaşılan durumun (yani, birden çok iş parçacığı tarafından erişilebilen kaynaklara) iş parçacığı güvenli bir şekilde erişilebilir olduğundan emin olun, böylece aynı anda yalnızca bir iş parçacığının kaynaklara özel erişimi vardır.Ensure that shared state (that is, resources that can be accessed by multiple threads) is accessed in a thread-safe way, so that only one thread at a time has exclusive access to the resources. CountdownEvent Interlocked Monitor Mutex Kaynaklara erişimi eşzamanlı hale getirmek için,, ve gibi çok sayıda sınıf vardır.A large number of classes, such as CountdownEvent, Interlocked, Monitor, and Mutex, are available to synchronize access to resources. Daha fazla bilgi için bkz. Threading.For more information, see Threading. Ayrıca dil desteği, C# ' deki kilit ifadesiyle ve Visual Basic içindeki SyncLock yapısı ile kullanılabilir.In addition, language support is available through the lock statement in C# and the SyncLock construct in Visual Basic.
Aşağıdaki örnek, ArgumentOutOfRangeException önceki örnekteki ve diğer sorunları ele alınmaktadır.The following example addresses the ArgumentOutOfRangeException and the other issues from the previous example. List<T>Koleksiyona erişimin iş parçacığı açısından güvenli olduğundan emin olmak için nesneyi nesne ile değiştirir ConcurrentBag<T> , CountdownEvent uygulama iş parçacığının yalnızca diğer iş parçacıkları yürütüldükten sonra devam ettiğinden emin olmak için bir nesne kullanır ve aynı anda yalnızca bir iş parçacığının değişkene erişebildiğinden emin olmak için bir kilit kullanır
msg.It replaces the List<T> object with a ConcurrentBag<T> object to ensure that access to the collection is thread-safe, uses a CountdownEvent object to ensure that the application thread continues only after other threads have executed, and uses a lock to ensure that only one thread can access themsgvariable at a time.using System; using System.Collections.Concurrent; using System.Threading; public class Continent { public String Name { get; set; } public int Population { get; set; } public Decimal Area { get; set; } } public class Example { static ConcurrentBag<Continent> continents = new ConcurrentBag<Continent>(); static CountdownEvent gate; static String msg = String.Empty; public static void Main() { String[] names = { "Africa", "Antarctica", "Asia", "Australia", "Europe", "North America", "South America" }; gate = new CountdownEvent(names.Length); // Populate the list. foreach (var name in names) { var th = new Thread(PopulateContinents); th.Start(name); } // Display the list. gate.Wait(); Console.WriteLine(msg); Console.WriteLine(); var arr = continents.ToArray(); for (int ctr = 0; ctr < names.Length; ctr++) { var continent = arr[ctr]; Console.WriteLine("{0}: Area: {1}, Population {2}", continent.Name, continent.Population, continent.Area); } } private static void PopulateContinents(Object obj) { String name = obj.ToString(); lock(msg) { msg += String.Format("Adding '{0}' to the list.\n", name); } var continent = new Continent(); continent.Name = name; // Sleep to simulate retrieving remaining data. Thread.Sleep(25); continents.Add(continent); gate.Signal(); } } // The example displays output like the following: // Adding 'Africa' to the list. // Adding 'Antarctica' to the list. // Adding 'Asia' to the list. // Adding 'Australia' to the list. // Adding 'Europe' to the list. // Adding 'North America' to the list. // Adding 'South America' to the list. // // // Africa: Area: 0, Population 0 // Antarctica: Area: 0, Population 0 // Asia: Area: 0, Population 0 // Australia: Area: 0, Population 0 // Europe: Area: 0, Population 0 // North America: Area: 0, Population 0 // South America: Area: 0, Population 0Imports System.Collections.Concurrent Imports System.Threading Public Class Continent Public Property Name As String Public Property Population As Integer Public Property Area As Decimal End Class Module Example Dim continents As New ConcurrentBag(Of Continent) Dim gate As CountdownEvent Dim msg As String = String.Empty Public Sub Main() Dim names() As String = { "Africa", "Antarctica", "Asia", "Australia", "Europe", "North America", "South America" } gate = new CountdownEvent(names.Length) ' Populate the list. For Each name In names Dim th As New Thread(AddressOf PopulateContinents) th.Start(name) Next ' Display the list. gate.Wait() Console.WriteLine(msg) Console.WriteLine() For ctr As Integer = 0 To names.Length - 1 Dim continent = continents(ctr) Console.WriteLine("{0}: Area: {1}, Population {2}", continent.Name, continent.Population, continent.Area) Next End Sub Private Sub PopulateContinents(obj As Object) Dim name As String = obj.ToString() SyncLock msg msg += String.Format("Adding '{0}' to the list.{1}", name, vbCrLf) End SyncLock Dim continent As New Continent() continent.Name = name ' Sleep to simulate retrieving remaining data. Thread.Sleep(25) continents.Add(continent) gate.Signal() End Sub End Module ' The example displays output like the following: ' Adding 'Africa' to the list. ' Adding 'Antarctica' to the list. ' Adding 'Asia' to the list. ' Adding 'Australia' to the list. ' Adding 'Europe' to the list. ' Adding 'North America' to the list. ' Adding 'South America' to the list. ' ' ' Africa: Area: 0, Population 0 ' Antarctica: Area: 0, Population 0 ' Asia: Area: 0, Population 0 ' Australia: Area: 0, Population 0 ' Europe: Area: 0, Population 0 ' North America: Area: 0, Population 0 ' South America: Area: 0, Population 0
ArgumentOutOfRangeException 0x80131502 değerine sahip HRESULT COR_E_ARGUMENTOUTOFRANGE kullanır.ArgumentOutOfRangeException uses the HRESULT COR_E_ARGUMENTOUTOFRANGE, which has the value 0x80131502.
Bir örneğinin ilk özellik değerlerinin listesi için ArgumentOutOfRangeException , ArgumentOutOfRangeException oluşturuculara bakın.For a list of initial property values for an instance of ArgumentOutOfRangeException, see the ArgumentOutOfRangeException constructors.
Oluşturucular
| ArgumentOutOfRangeException() |
ArgumentOutOfRangeException sınıfının yeni bir örneğini başlatır.Initializes a new instance of the ArgumentOutOfRangeException class. |
| ArgumentOutOfRangeException(SerializationInfo, StreamingContext) |
ArgumentOutOfRangeException sınıfının yeni bir örneğini serileştirilmiş verilerle başlatır.Initializes a new instance of the ArgumentOutOfRangeException class with serialized data. |
| ArgumentOutOfRangeException(String) |
ArgumentOutOfRangeExceptionBu özel duruma neden olan parametrenin adı ile sınıfının yeni bir örneğini başlatır.Initializes a new instance of the ArgumentOutOfRangeException class with the name of the parameter that causes this exception. |
| ArgumentOutOfRangeException(String, Exception) |
ArgumentOutOfRangeExceptionBelirtilen bir hata iletisi ve bu özel durumun nedeni olan özel durum ile sınıfın yeni bir örneğini başlatır.Initializes a new instance of the ArgumentOutOfRangeException class with a specified error message and the exception that is the cause of this exception. |
| ArgumentOutOfRangeException(String, Object, String) |
ArgumentOutOfRangeExceptionParametre adı, bağımsız değişkenin değeri ve belirtilen bir hata iletisi ile sınıfın yeni bir örneğini başlatır.Initializes a new instance of the ArgumentOutOfRangeException class with the parameter name, the value of the argument, and a specified error message. |
| ArgumentOutOfRangeException(String, String) |
ArgumentOutOfRangeExceptionBu özel duruma ve belirtilen bir hata iletisine neden olan parametrenin adı ile sınıfının yeni bir örneğini başlatır.Initializes a new instance of the ArgumentOutOfRangeException class with the name of the parameter that causes this exception and a specified error message. |
Özellikler
| ActualValue |
Bu özel duruma neden olan bağımsız değişken değerini alır.Gets the argument value that causes this exception. |
| Data |
Özel durum hakkında ek kullanıcı tanımlı bilgiler sağlayan anahtar/değer çiftleri koleksiyonunu alır.Gets a collection of key/value pairs that provide additional user-defined information about the exception. (Devralındığı yer: Exception) |
| HelpLink |
Bu özel durumla ilişkili Yardım dosyasının bağlantısını alır veya ayarlar.Gets or sets a link to the help file associated with this exception. (Devralındığı yer: Exception) |
| HResult |
Belirli bir özel duruma atanan kodlanmış bir sayısal değer olan HRESULT 'yi alır veya ayarlar.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception. (Devralındığı yer: Exception) |
| InnerException |
ExceptionGeçerli özel duruma neden olan örneği alır.Gets the Exception instance that caused the current exception. (Devralındığı yer: Exception) |
| Message |
Hata iletisini ve geçersiz bağımsız değişken değerinin dize gösterimini ve yalnızca bağımsız değişken değeri null ise hata iletisini alır.Gets the error message and the string representation of the invalid argument value, or only the error message if the argument value is null. |
| ParamName |
Bu özel duruma neden olan parametrenin adını alır.Gets the name of the parameter that causes this exception. (Devralındığı yer: ArgumentException) |
| Source |
Uygulamanın veya hataya neden olan nesnenin adını alır veya ayarlar.Gets or sets the name of the application or the object that causes the error. (Devralındığı yer: Exception) |
| StackTrace |
Çağrı yığınında anlık çerçevelerin dize gösterimini alır.Gets a string representation of the immediate frames on the call stack. (Devralındığı yer: Exception) |
| TargetSite |
Geçerli özel durumu oluşturan yöntemi alır.Gets the method that throws the current exception. (Devralındığı yer: Exception) |
Yöntemler
| Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.Determines whether the specified object is equal to the current object. (Devralındığı yer: Object) |
| GetBaseException() |
Türetilmiş bir sınıfta geçersiz kılınırsa, Exception bir veya daha fazla sonraki özel durumun kök nedeni olan öğesini döndürür.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions. (Devralındığı yer: Exception) |
| GetHashCode() |
Varsayılan karma işlevi olarak işlev görür.Serves as the default hash function. (Devralındığı yer: Object) |
| GetObjectData(SerializationInfo, StreamingContext) |
SerializationInfoGeçersiz bağımsız değişken değerine ve ek özel durum bilgisine sahip nesneyi ayarlar.Sets the SerializationInfo object with the invalid argument value and additional exception information. |
| GetObjectData(SerializationInfo, StreamingContext) |
SerializationInfoNesneyi parametre adı ve ek özel durum bilgileri ile ayarlar.Sets the SerializationInfo object with the parameter name and additional exception information. (Devralındığı yer: ArgumentException) |
| GetType() |
Geçerli örneğin çalışma zamanı türünü alır.Gets the runtime type of the current instance. (Devralındığı yer: Exception) |
| MemberwiseClone() |
Geçerli bir basit kopyasını oluşturur Object .Creates a shallow copy of the current Object. (Devralındığı yer: Object) |
| ToString() |
Geçerli özel durumun dize gösterimini oluşturur ve döndürür.Creates and returns a string representation of the current exception. (Devralındığı yer: Exception) |
Ekinlikler
| SerializeObjectState |
Özel durum hakkında serileştirilmiş veri içeren bir özel durum nesnesi oluşturmak için bir özel durum serileştirildiğinde gerçekleşir.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception. (Devralındığı yer: Exception) |