Bu makale, makine tarafından çevrilmiştir. Makaleyi İngilizce dilinde görüntülemek için İngilizce onay kutusunu işaretleyin. Ayrıca, fare işaretçisiyle İngilizce metnin üzerine gelerek metni açılır pencerede de görüntüleyebilirsiniz.
Çeviri
İngilizce

ArgumentOutOfRangeException Sınıfı

 

Yayımlanan: Ağustos 2016

Çağrılan yöntem tarafından tanımlanan bir bağımsız değişkenin değeri izin verilen değer aralığının dışında olduğunda, oluşturulan özel durum.

Ad alanı:   System
Derleme:  mscorlib (mscorlib.dll içinde)

System.Object
  System.Exception
    System.SystemException
      System.ArgumentException
        System.ArgumentOutOfRangeException

[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ArgumentOutOfRangeException : ArgumentException, 
	ISerializable

AdıAçıklama
System_CAPS_pubmethodArgumentOutOfRangeException()

Yeni bir örneğini başlatır ArgumentOutOfRangeException sınıfı.

System_CAPS_protmethodArgumentOutOfRangeException(SerializationInfo, StreamingContext)

Yeni bir örneğini başlatır ArgumentOutOfRangeException serileştirilmiş verilerle sınıfı.

System_CAPS_pubmethodArgumentOutOfRangeException(String)

Yeni bir örneğini başlatır ArgumentOutOfRangeException Bu özel duruma neden olan parametrenin adı ile sınıfı.

System_CAPS_pubmethodArgumentOutOfRangeException(String, Exception)

Yeni bir örneğini başlatır ArgumentOutOfRangeException belirtilen hata iletisini ve bu özel durumun nedeni olan özel durum ile sınıf.

System_CAPS_pubmethodArgumentOutOfRangeException(String, Object, String)

Yeni bir örneğini başlatır ArgumentOutOfRangeException parametresi sınıf adı, belirtilen hata iletisini ve bağımsız değişken değeri.

System_CAPS_pubmethodArgumentOutOfRangeException(String, String)

Yeni bir örneğini başlatır ArgumentOutOfRangeException Bu özel durumun ve belirtilen hata iletisini neden olan parametrenin adı ile sınıfı.

AdıAçıklama
System_CAPS_pubpropertyActualValue

Bu özel duruma neden olan bağımsız değişken değeri alır.

System_CAPS_pubpropertyData

Ek kullanıcı tanımlı özel durumla ilgili bilgiler anahtar/değer çiftleri koleksiyonu alır.(Exception kaynağından devralındı.)

System_CAPS_pubpropertyHelpLink

Alır veya bu özel durumla ilişkili Yardım dosyası için bir bağlantı ayarlar.(Exception kaynağından devralındı.)

System_CAPS_pubpropertyHResult

Alır veya ayarlar HRESULT, belirli bir özel durum atanan kodlanmış bir sayısal değer.(Exception kaynağından devralındı.)

System_CAPS_pubpropertyInnerException

Alır Exception geçerli özel duruma neden örneği.(Exception kaynağından devralındı.)

System_CAPS_pubpropertyMessage

Bağımsız değişken değeri null ise, hata iletisi ve dize gösterimi geçersiz bağımsız değişken değeri veya hata iletisi alır.(ArgumentException.Message geçersiz kılar.)

System_CAPS_pubpropertyParamName

Bu özel duruma neden olan parametrenin adını alır.(ArgumentException kaynağından devralındı.)

System_CAPS_pubpropertySource

Alır veya uygulama veya hataya neden nesnesinin adını ayarlar.(Exception kaynağından devralındı.)

System_CAPS_pubpropertyStackTrace

Çağrı yığınındaki hemen çerçeveler dize gösterimini alır.(Exception kaynağından devralındı.)

System_CAPS_pubpropertyTargetSite

Geçerli özel durum oluşturur yöntemi alır.(Exception kaynağından devralındı.)

AdıAçıklama
System_CAPS_pubmethodEquals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Object kaynağından devralındı.)

System_CAPS_protmethodFinalize()

Atık toplama işlemi tarafından alınmadan önce nesnenin kaynaklarını boşaltmayı denemesine izin verir. (Object kaynağından devralındı.)

System_CAPS_pubmethodGetBaseException()

Türetilen bir sınıfta geçersiz kılındığında, döndürür Exception olan bir veya daha fazla sonraki özel durumları temel nedenini.(Exception kaynağından devralındı.)

System_CAPS_pubmethodGetHashCode()

Varsayılan karma işlevi olarak görev yapar.(Object kaynağından devralındı.)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Ayarlar SerializationInfo geçersiz bağımsız değişken değeri ve ek özel durum bilgisi olan nesne.(ArgumentException.GetObjectData(SerializationInfo, StreamingContext) geçersiz kılar.)

System_CAPS_pubmethodGetType()

Çalışma zamanı türü geçerli örneğini alır.(Exception kaynağından devralındı.)

System_CAPS_protmethodMemberwiseClone()

Geçerli basit bir kopyasını oluşturur Object.(Object kaynağından devralındı.)

System_CAPS_pubmethodToString()

Oluşturur ve geçerli özel durumun dize gösterimini döndürür.(Exception kaynağından devralındı.)

AdıAçıklama
System_CAPS_proteventSerializeObjectState

Bir özel durum seri içeren bir özel durum nesnesi oluşturmak için veri özel durumla ilgili serileştirilmiş oluşur.(Exception kaynağından devralındı.)

Bir ArgumentOutOfRangeException bir yöntemi çağrılır ve en az bir yönteme geçirilen bağımsız değişkenlerin olmadığında özel durum null ve bağımsız değişken için beklenen değerleri kümesi üyesi olmayan geçersiz bir değer içeriyor. ParamName Özelliği geçersiz bağımsız değişken tanımlar ve ActualValue özelliği, bir değer varsa, geçersiz değerini tanımlar.

Genellikle, bir ArgumentOutOfRangeException Geliştirici hatadan sonuçlanır. Özel durum işleme yerine bir try/catch bloğu, özel durumun nedenini ortadan veya bağımsız değişken bir yöntem çağrısı tarafından döndürülen veya kullanıcı tarafından özel durum oluşturan yönteme geçirilen önce giriş, yönteme geçirmeden önce bağımsız değişkenlerini doğrulayın.

ArgumentOutOfRangeException yaygın olarak kullanılan:

Koşullarında bir ArgumentOutOfRangeException özel durum oluştuğunda şunlardır:

Dizin numarası ile bir koleksiyonun üyesi alma ve dizin numarası geçersiz.

Bu en yaygın nedenidir bir ArgumentOutOfRangeException özel durum. Genellikle, dizin numarasını üç nedenlerden biri geçersiz:

  • Koleksiyon üyeleri yoktur ve kod mu olduğunu varsayar. Aşağıdaki örnek, hiçbir öğe sahip bir koleksiyonun ilk öğesine almaya çalışır:

    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: index
    

    Özel durum önlemek için kontrol olup olmadığını koleksiyonun Count özelliği aşağıdaki kod parçası gibi herhangi bir üye alınacak çalışmadan önce sıfırdan büyük.

    if (list.Count > 0)
       Console.WriteLine("The first item: '{0}'", list[0]);
    

    Üye var olmayan bir dizin yerine gibi yöntemini çağırarak bir koleksiyona eklemek denediğinizden bazı durumlarda, bu durum ortaya çıkabilir Add, bu amaç için bulunmaktadır. Aşağıdaki örnek bir öğe bir koleksiyona var olmayan bir dizin yerine tarafından çağırma eklemeyi dener List<T>.Add yöntemi.

    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()
    

    Aşağıdaki kod parçası bu hatayı düzeltir:

    var squares = new List<int>();
    for (int ctr = 0; ctr < numbers.Count; ctr++)
       squares.Add((int) Math.Pow(numbers[ctr], 2)); 
    
  • Bir öğenin dizinini negatiftir almak denediğiniz. Bu genellikle belirli bir öğenin dizini için bir koleksiyon araştırdık ve hatalı şekilde arama başarılı olduğu kabul nedeniyle oluşur. Aşağıdaki örnekte, çağrı List<T>.FindIndex(Predicate<T>) yöntemi başarısız bulunamadı "Z" ve dolayısıyla eşit bir dize -1 döndürür. Ancak bu geçersiz dizin değeri değildir.

    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: index
    

    Özel durum önlemek için döndürülen dizin büyük veya sıfıra öğeyi koleksiyondan alınacak çalışmadan önce aşağıdaki kodu olarak parçası olmayan sağlayarak arama başarılı olduğunu denetleyin.

    // 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]); 
    
  • Bir öğenin dizinini koleksiyonun değerine eşittir almak denediğiniz Count özelliği, aşağıdaki örnekte gösterildiği gibi.

    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: index
    

    .NET Framework koleksiyonları kullanmaya sıfır tabanlı dizin, koleksiyonun ilk öğesine dizin 0, ve son öğeyi dizininde olduğundan Count - 1. Son öğeye dizini erişim sağlayarak hata ortadan kaldırabilir Count - 1, aşağıdaki kod gibi.

    // Display the elements in the list by index.
    for (int ctr = 0; ctr < list.Count; ctr++) 
       Console.WriteLine("Index {0}: {1}", ctr, list[ctr]);
    
Bir dize işleme yöntemini çağırarak bir dize işlemi gerçekleştirmeye çalıştığınız ve başlangıç dizini dizesinde mevcut değil.

Gibi yöntemler gibi aşırı yüklemeleri String.Compare, String.CompareOrdinal, String.IndexOf, IndexOfAny, String.Insert, String.LastIndexOf, String.LastIndexOfAny, Remove, veya String.Substring işlemi başlangıç dizini gerektiren dizininin dize içinde geçerli bir konum olması belirtmek izin. Geçerli dizin aralığı 0'dan String.Length - 1.

Bu dört yaygın nedenler ArgumentOutOfRangeException özel durum:

  • Bir boş dize., çalışmakta olduğunuz veya String.Empty. Çünkü, String.Length özelliği, 0, dizin oluşturur tarafından işlemek için her türlü girişim döndürür bir ArgumentOutOfRangeException özel durum. Aşağıdaki örnekte, tanımlayan bir GetFirstCharacter yöntemi bir dizenin ilk karakteri döndürür. Son dize geçirilen gibi dize boş ise, yöntem, yöntem bir ArgumentOutOfRangeException özel durum.

    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()
    

    Özel durum test ederek çıkarabilirsiniz olup olmadığını dizenin String.Length çağırarak veya sıfırdan büyük IsNullOrEmpty dize olmadığından emin olmak için yöntemi null veya boş. Aşağıdaki kod parçası, ikincisi yapar. Bir dize ise bu durumda, null veya boş GetFirstCharacter yöntem U + 0000 döndürür.

    static char GetFirstCharacter(String s)
    {
       if (String.IsNullOrEmpty(s)) 
          return '\u0000';
       else   
          return s[0];
    }
    
  • Dize, dize içinde bir alt konumunu temel bir dize düzenleme ve alt dizeyi gerçekten bulunup bulunmadığını belirlemek başarısız oldu.

    Aşağıdaki örnek iki sözcük tümceciği ikinci sözcüğün ayıklar. Onu oluşturan bir ArgumentOutOfRangeException özel durumu tümceciği yalnızca bir sözcükten, ve bu nedenle bir katıştırılmış bir boşluk karakteri içermiyor. Bu kaynaklanır çağrısı String.IndexOf(String) yöntemi başarısız oldu ve bu değeri geçersiz sonra geçirilen belirtmek için -1 döndürür String.Substring(Int32) yöntemi.

    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()
    

    Özel durum ortadan kaldırmak için dize işleme yöntemini çağırmadan önce dize arama yöntemi tarafından döndürülen değer doğrulayın.

    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 citizen
    
Geçerli dize aralığı dışında bir alt dize ayıklamak denediniz.

Tüm alt dizenin ve dize, alt dizenin karakter sayısı sonuna devam etmeyin alt dizeleri için başlangıç konumunu belirtin gerektiren alt dizeleri ayıklama yöntemleri. Bu Not dizini son alt dizeyi karakterinin.

Bir ArgumentOutOfRangeException özel durumu genellikle oluşturulur bu durumda çünkü alt dizenin karakter sayısı yanlış hesaplanmış. Bir arama yöntemi gibi kullanıyorsanız, String.IndexOf Başlangıç ve bitiş konumları bir alt dizenin tanımlamak için:

  • Bitiş konumu karakteri tarafından döndürdüyse String.IndexOf içindeki alt dizeden, dahil edilecek bitiş konumu alt dizenin formül tarafından verilir.

    endIndex - startIndex + 1
    
  • Bitiş konumu karakteri tarafından döndürdüyse String.IndexOf alt dizeyi, çıkarılacak olan formül tarafından verilen alt dizenin bitiş konumu

    endIndex - startIndex 
    

Aşağıdaki örnekte tanımlayan bir FindWords kullanan yöntem String.IndexOfAny(Char[], Int32) yöntemi boşluk karakterleri ve noktalama tanımlamak için bir dize olarak işaretler ve dizesinde bulunan sözcükleri içeren bir dizi döndürür.

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++;
         }
         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'
Bir yönteme yalnızca pozitif sayılar ve sıfır gerektiren bağımsız değişkeni negatif bir sayı geçtiğinde veya negatif bir sayı veya sıfır yalnızca pozitif sayı gerektiren bağımsız değişkeni bir yönteme geçirilen.

Örneğin, Array.CreateInstance(Type, Int32, Int32, Int32) yöntemi gerektiren her boyut iki boyutlu bir dizi öğe sayısını belirtin; her boyut için geçerli değerler 0'dan aralığında Int32.MaxValue. Aşağıdaki örnekte boyut bağımsız değişkeni negatif değerine sahip olduğundan yöntemi oluşturur, ancak bir ArgumentOutOfRangeException özel durum.

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: length2

Hatayı düzeltmek için geçersiz bağımsız değişken değeri negatif olmayan olduğundan emin olun. Aşağıdaki kod parçası olduğu gibi geçerli bir değer sağlayarak bunu yapabilirsiniz.

int dimension1 = 10;
int dimension2 = 10;
Array arr = Array.CreateInstance(typeof(String), 
                                 dimension1, dimension2);   

Ayrıca girişi doğrulama ve, geçersiz ise bazı eylemi gerçekleştirin. Aşağıdaki kod parçası yöntemi çağırmak yerine bir hata iletisi görüntüler.

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);   
}
Yarış durumu, birden çok iş parçacıklı veya zaman uyumsuz olarak yürütmek ve bir dizi veya koleksiyon güncelleştirmelerini görevleri olan bir uygulama yok.

Aşağıdaki örnek bir List<T> koleksiyonu doldurulacak nesne Continent nesneleri. Onu oluşturan bir ArgumentOutOfRangeException koleksiyonu tam olarak doldurulan önce koleksiyonda yedi öğeleri görüntülemek örnek çalışırsa özel durum.

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()

Bu durumda, iki kaynak birden çok iş parçacığı tarafından erişilen:

  • continents Koleksiyonu. Kendi List<T>.Add yöntemi, birden çok iş parçacığı tarafından çağrılır. Ayrıca, koleksiyon üyelerini yinelenen zaman tam olarak yedi öğeyle doldurulur ana veya birincil iş parçacığı varsayar.

  • msg Birden çok iş parçacığı tarafından birleştirilmiş dize.

Hatayı düzeltmek için paylaşılan durumu aşağıdaki gibi bir iş parçacığı açısından güvenli şekilde erişilir emin olun.

  • Uygulamanızı bir dizi veya koleksiyon nesnesi kullanan türler gibi bir iş parçacığı açısından güvenli koleksiyon sınıfı kullanmayı System.Collections.Concurrent ad alanı veya System.Collections.Immutable bant dışı sürüm.

  • Böylece aynı anda yalnızca bir iş parçacığının kaynaklara özel kullanım erişimi var. iş parçacığı açısından güvenli bir şekilde, paylaşılan durum (yani, birden çok iş parçacığı tarafından erişilebilen kaynaklar) erişilir emin olun. Sınıflar, çok sayıda gibi CountdownEvent, Interlocked, Monitor, ve Mutex, kaynaklara erişimi eşitlemek kullanılabilir. Daha fazla bilgi için bkz: Yönetilen İş Parçacığı Oluşturma. Ayrıca, dil desteği aracılığıyla kullanılabilir kilit C# deyimi ve SyncLock Visual Basic'te oluşturun.

Aşağıdaki örnek adresleri ArgumentOutOfRangeException özel durumu ve diğer sorunlar önceki örnekteki. Değiştirir List<T> nesnesi ile bir ConcurrentBag<T> koleksiyonuna erişimi iş parçacığı açısından güvenli, kullanan emin olmak için nesne bir CountdownEvent uygulama iş parçacığı yalnızca diğer iş parçacıkları yürüttüğünüz kullanır, yalnızca bir iş parçacığının emin olmak için bir kilit erişebileceği sonra devam etmesini sağlamak için nesne msg aynı anda değişken.

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 0

ArgumentOutOfRangeException 0x80131502 değerine sahip HRESULT COR_E_ARGUMENTOUTOFRANGE kullanır.

Bir örneği için başlangıç özellik değerlerini bir listesi için ArgumentOutOfRangeException, bkz: ArgumentOutOfRangeException Oluşturucular.

Aşağıdaki örnek, bir davet edilen Konuk hakkında bilgi içeren sınıf tanımlar. Konuk 21 küçük ise bir ArgumentOutOfRangeException özel durumu oluşturulur.

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

Evrensel Windows Platformu
8 sonrasında kullanılabilir
.NET Framework
1.1 sonrasında kullanılabilir
Taşınabilir Sınıf Kitaplığı
Destekleyen: taşınabilir .NET platformları
Silverlight
2.0 sonrasında kullanılabilir
Windows Phone Silverlight
7.0 sonrasında kullanılabilir
Windows Phone
8.1 sonrasında kullanılabilir

Bu türdeki herhangi bir public static (Visual Basic’te Paylaşılan Visual Basic'te), bu tür üyeler iş parçacığı güvenliklidir. Hiçbir örnek üyesinin, iş parçacığı güvenli olduğu garanti edilmez.

Başa dön
Show: