Daha çox

Redaktə olun Qaytarılmamış səhv (HRESULT istisnası: 0x80004005 (E_FAIL))


IEngineEditor.StartEditing metodundan istifadə edərək SDE Workspace -də redaktə sessiyasına başlayacağam. İş sahəm düzgün bir dəyərə malikdir, çünki onu istifadə edən bir xüsusiyyət sinifini almaqda heç bir problemim yoxdur. Harada səhv etdiyimi və ya bu səhvin nədən qaynaqlandığını bilmirəm. Xahiş edirəm kömək edin.

IPropertySet propertySet = yeni PropertySetClass (); propertySet.SetProperty ("SERVER", MyServer); propertySet.SetProperty ("INSTANCE", MyInstance); propertySet.SetProperty ("DATABASE", MyDatabase); propertySet.SetProperty ("KULLANICI", MyUsername); propertySet.SetProperty ("PAROLA", MyPassword); propertySet.SetProperty ("VERSION", MyVersion); FactoryType = Type.GetTypeFromProgID yazın ("esriDataSourcesGDB.SdeWorkspaceFactory"); IWorkspaceFactory workspaceFactory = (IWorkspaceFactory) Activator.CreateInstance (factoryType); IWorkspace iş sahəsi = workspaceFactory.Open (propertySet, 0); IFeatureWorkspace pFeatureWorkspace = IFEatureWorkspace olaraq workSpace; IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass ("MyFeatureClassName"); // Bu xüsusiyyət sinifini əldə edə bilərəm. Bu sonradan istifadə üçün idi IMap pMap = mapControl.Map; engineEditor.StartEditing (workSpace, pMap);

Hələlik şərh verməyə "50 nüfuzum" yoxdur, buna görə də belə şərh yazmalıyam:

Çalışdığınız ArcGIS -in lisenziyalı məhsulu nədir? ArcGIS Basic (əvvəllər ArcView) bir SDE iş sahəsini redaktə edə bilməz, buna görə də istifadə etdiyiniz şey probleminiz ola bilər. ArcEngine istifadə edirsinizsə, tətbiqinizi başladığınız lisenziyalı məhsulu yoxlayın.


Aşağıdakı nümunə, ArithmeticException səhvlərini idarə etmək üçün təyin edilmiş tutma blokunu nümayiş etdirir. Bu tutma bloku DivideByZeroException səhvlərini də tutur, çünki DivideByZeroException ArithmeticException -dan qaynaqlanır və DivideByZeroException səhvləri üçün açıq şəkildə müəyyən edilmiş bir blok yoxdur.

Bu sinif bütün istisnalar üçün əsas sinifdir. Bir səhv baş verdikdə ya sistem, ya da hazırda icra olunan tətbiq, səhv haqqında məlumat olan bir istisna ataraq bu barədə məlumat verir. İstisna atıldıqdan sonra tətbiq və ya standart istisna işləyicisi tərəfindən idarə olunur.

Səhvlər və istisnalar

İş vaxtı səhvləri müxtəlif səbəblərdən yarana bilər. Bununla birlikdə, bütün səhvlər kodunuzda istisna olaraq işlənməməlidir. İş zamanı baş verə biləcək bəzi səhvlər və onlara cavab verməyin uyğun yolları.

İstifadə səhvləri. İstifadə xətası, proqram məntiqində bir istisna ilə nəticələnə biləcək bir səhvdir. Bununla birlikdə, səhv istisna işləmə yolu ilə deyil, səhv kodu dəyişdirərək həll edilməlidir. Məsələn, aşağıdakı nümunədə Object.Equals (Object) metodunun ləğvi, obj arqumentinin həmişə null olmamalı olduğunu düşünür.

Obj null olduqda nəticələnən NullReferenceException istisnası, Object.Equals çağırılmadan əvvəl null üçün açıq şəkildə yoxlanılması üçün mənbə kodunun dəyişdirilməsi ilə aradan qaldırıla bilər və sonra yenidən tərtib edilir. Aşağıdakı nümunədə sıfır arqumenti idarə edən düzəldilmiş mənbə kodu var.

İstifadə səhvləri üçün istisna işləmə istifadə etmək əvəzinə, debug quruluşlarında istifadə səhvlərini müəyyən etmək üçün Debug.Assert metodundan və həm hata ayıklama, həm də buraxılış quruluşlarında istifadə səhvlərini müəyyən etmək üçün Trace.Assert metodundan istifadə edə bilərsiniz. Daha çox məlumat üçün, İdarə olunan Koddakı Təsdiqlərə baxın.

Proqram səhvləri. Proqram xətası, səhvsiz kod yazmaqla mütləq qarşısı alınmayan bir iş vaxtı səhvidir.

Bəzi hallarda, bir proqram xətası gözlənilən və ya adi bir səhv vəziyyətini əks etdirə bilər. Bu vəziyyətdə, proqram səhvini həll etmək üçün istisnalardan istifadə etməmək və bunun əvəzinə əməliyyatı yenidən sınamaq istəyə bilərsiniz. Məsələn, istifadəçinin müəyyən bir formatda bir tarix daxil etməsi gözlənilirsə, DateTime.TryParseExact metoduna zəng edərək tarix sətrini təhlil edə bilərsiniz. Tarix sətri bir DateTime dəyərinə çevrilə bilməsə, FormatException istisnası yaradan ParseExact metodu. Eynilə, bir istifadəçi olmayan bir faylı açmağa çalışarsa, əvvəlcə faylın olub olmadığını yoxlamaq üçün File.Exists metoduna zəng edə bilərsiniz və əgər yoxdursa istifadəçiyə onu yaratmaq istədiyini bildirə bilərsiniz.

Digər hallarda, bir proqram xətası kodunuzda işlənə biləcək gözlənilməz bir səhv vəziyyətini əks etdirir. Məsələn, bir faylın olub olmadığını yoxlamısınızsa da, açmadan əvvəl silinə bilər və ya zədələnmiş ola bilər. Bu vəziyyətdə, bir StreamReader obyekti yaradaraq və ya Açıq metodu çağıraraq faylı açmağa çalışmaq FileNotFoundException istisnası yarada bilər. Bu hallarda, səhvdən qurtarmaq üçün istisna işlətmədən istifadə etməlisiniz.

Sistem arızaları. Sistem çatışmazlığı, mənalı bir şəkildə proqramlaşdırıla bilməyən bir iş vaxtı səhvidir. Məsələn, ümumi dil iş vaxtı əlavə yaddaş ayıra bilmirsə, hər hansı bir üsul OutOfMemoryException istisnası yarada bilər. Bir qayda olaraq, sistem çatışmazlıqları istisna idarəetmə vasitəsi ilə həll edilmir. Bunun əvəzinə, AppDomain.UnhandledException kimi bir hadisədən istifadə edə bilərsiniz və istisna məlumatlarını daxil etmək və tətbiq sona çatmazdan əvvəl istifadəçiyə uğursuzluq barədə məlumat vermək üçün Environment.FailFast metoduna zəng edə bilərsiniz.

Blokları sınayın/tutun

Ümumi dil işləmə müddəti, istisnaların obyekt kimi təqdim edilməsinə və proqram kodunun və istisna idarəetmə kodunun sınaq bloklarına və tutma bloklarına ayrılmasına əsaslanan bir istisna idarəetmə modeli təqdim edir. Hər biri müəyyən bir istisna növünü idarə etmək üçün hazırlanmış bir və ya daha çox tutma bloku və ya başqa bir blokdan daha spesifik bir istisna tutmaq üçün nəzərdə tutulmuş bir blok ola bilər.

Bir tətbiq bir tətbiq kodu blokunun icrası zamanı baş verən istisnaları idarə edərsə, kod bir cəhd ifadəsi içərisində yerləşdirilməlidir və buna cəhd bloku deyilir. Bir cəhd bloku tərəfindən atılan istisnaları idarə edən tətbiq kodu, tutma ifadəsinə yerləşdirilir və tutma bloku adlanır. Sıfır və ya daha çox tutma bloku bir sınaq bloku ilə əlaqələndirilir və hər bir tutma bloku, idarə etdiyi istisnaların növlərini təyin edən bir növ filtrə malikdir.

Bir cəhd blokunda bir istisna meydana gəldikdə, sistem, istisnanı idarə edən bir tutma blokunu tapana qədər əlaqəli tutma bloklarını tətbiq kodunda göründükləri qaydada axtarır. Tutma blokunun tip filtri T və ya T -dən qaynaqlanan hər hansı bir növü təyin edərsə, tutma bloku T tipli bir istisnanı idarə edir. İstisnanı idarə edən ilk tutma blokunu tapdıqdan sonra sistem axtarışını dayandırır. Bu səbəbdən tətbiq kodunda, bu bölməni izləyən nümunədə göstərildiyi kimi, bir növü idarə edən bir tutma bloku, əsas növlərini idarə edən bir tutma blokundan əvvəl göstərilməlidir. System.Exception ilə işləyən tutma bloku son olaraq göstərilir.

Mövcud cəhd bloku ilə əlaqəli tutma bloklarından heç biri istisnanı idarə etmirsə və cari cəhd bloku cari zəngdə digər cəhd bloklarının içərisindədirsə, sonrakı əlavə cəhd bloku ilə əlaqəli tutma blokları axtarılır. İstisna üçün heç bir tutma bloku tapılmazsa, sistem cari zəngdə əvvəlki yuvalama səviyyələrini axtarır. Cari zəngdə istisna üçün heç bir tutma bloku tapılmazsa, istisna zəng yığıncağına ötürülür və əvvəlki yığın çərçivəsi istisnanı idarə edən tutma bloku axtarılır. Çağırış yığınının axtarışı, istisna həll olunana qədər və ya zəng yığınında artıq çərçivələr qalmayana qədər davam edir. İstisnanı idarə edən bir tutma bloku tapılmadan zəng yığınının üstünə çatılırsa, standart istisna işləyicisi onu idarə edir və tətbiq sona çatır.

İstisna növünün xüsusiyyətləri

İstisna növləri aşağıdakı xüsusiyyətləri dəstəkləyir:

Səhvliyi izah edən insan tərəfindən oxunan mətn. İstisna baş verdikdə, iş vaxtı istifadəçiyə xətanın mahiyyəti barədə məlumat vermək və problemi həll etmək üçün tədbir təklif etmək üçün bir mətn mesajı təqdim edir. Bu mətn mesajı istisna obyektinin Mesaj xüsusiyyətində saxlanılır. İstisna obyekti yaradılarkən, bu xüsusi istisnanın təfərrüatlarını təsvir etmək üçün konstruktora bir mətn sətri ötürə bilərsiniz. Konstruktora heç bir səhv mesajı arqumenti verilmirsə, standart səhv mesajı istifadə olunur. Daha çox məlumat üçün Mesaj xüsusiyyətinə baxın.

İstisna atıldıqda zəng yığının vəziyyəti. StackTrace xüsusiyyəti, kodda xətanın harada meydana gəldiyini təyin etmək üçün istifadə edilə bilən bir yığın izi daşıyır. Yığın izi, çağırılan bütün metodları və zənglərin edildiyi mənbə sənədindəki satır nömrələrini siyahıya alır.

İstisna sinif xüsusiyyətləri

İstisna sinifinə kodun yerini, növünü, yardım faylını və istisnanın səbəbini təyin etməyə kömək edən bir sıra xüsusiyyətlər daxildir: StackTrace, InnerException, Message, HelpLink, HResult, Source, TargetSite və Data.

İki və ya daha çox istisna arasında səbəb əlaqəsi olduqda, InnerException mülkiyyəti bu məlumatı saxlayır. Xarici istisna bu daxili istisnaya cavab olaraq atılır. Xarici istisnanı idarə edən kod, səhvləri daha uyğun şəkildə idarə etmək üçün əvvəlki daxili istisnadan olan məlumatları istifadə edə bilər. İstisna ilə bağlı əlavə məlumatlar, Data xüsusiyyətində açar/dəyər cütləri toplusu olaraq saxlanıla bilər.

İstisna obyekti yaradılarkən konstruktora ötürülən səhv mesajı sətri lokallaşdırılmalı və ResourceManager sinifindən istifadə edərək bir qaynaq faylından verilə bilər. Yerli mənbələr haqqında daha çox məlumat üçün, Peyk Assambleyaları Yaratmaq və Qablaşdırma və Resursların Yerləşdirilməsi mövzusuna baxın.

İstisnanın niyə baş verdiyinə dair istifadəçiyə geniş məlumat vermək üçün HelpLink mülkiyyəti bir yardım faylına bir URL (və ya URN) saxlaya bilər.

İstisna sinfi 0x80131500 dəyərinə malik HRESULT COR_E_EXCEPTION istifadə edir.

İstisna sinifinin bir nümunəsi üçün ilkin mülkiyyət dəyərlərinin siyahısı üçün İstisna qurucularına baxın.

Performans mülahizələri

İstisna atmaq və ya işlətmək, əhəmiyyətli miqdarda sistem qaynaqları və icra müddəti sərf edir. İstisnaları yalnız həqiqətən qeyri -adi şərtləri yerinə yetirmək üçün atın, proqnozlaşdırıla bilən hadisələri və ya axını idarə etməyi yox. Məsələn, bəzi hallarda, məsələn, sinif kitabxanası hazırlayarkən, metod arqumenti etibarsızdırsa, istisna etmək məqsədəuyğundur, çünki metodunuzun etibarlı parametrlərlə çağırılmasını gözləyirsiniz. Yanlış bir metod arqumenti, bir istifadə səhvinin nəticəsi deyilsə, qeyri -adi bir şeyin baş verdiyini bildirir. İstifadəçi girişi etibarsız olduğu təqdirdə istisna etmə, çünki istifadəçilərin bəzən etibarsız məlumatlar daxil etmələrini gözləmək olar. Bunun əvəzinə, istifadəçilərin etibarlı girişi daxil etmələri üçün yenidən cəhd mexanizmi təmin edin. İstifadə səhvlərini idarə etmək üçün istisnalardan istifadə etməməlisiniz. Bunun əvəzinə istifadə səhvlərini müəyyən etmək və düzəltmək üçün təsdiqlərdən istifadə edin.

Əlavə olaraq, geri qaytarma kodu kifayət qədər olduqda bir istisna atmayın, qayıtma kodunu istisnaya çevirməyin və müntəzəm olaraq bir istisnanı tutmayın, nəzərə almayın və sonra işlənməyə davam edin.

Bir istisnanın yenidən atılması

Əksər hallarda, istisna işçisi istisnanı zəng edənə ötürmək istəyir. Bu ən tez -tez baş verir:

Öz növbəsində .NET Framework sinif kitabxanasındakı və ya digər sinif kitabxanalarındakı metodlara edilən zəngləri bağlayan sinif kitabxanası.

Ölümcül bir istisna ilə qarşılaşan bir tətbiq və ya kitabxana. İstisna işçisi istisnanı qeyd edə və sonra istisnanı yenidən ata bilər.

İstisnanı yenidən atmağın tövsiyə olunan yolu, ifadə daxil etmədən C# -də atma ifadəsini və Visual Basic-də Atma ifadəsini istifadə etməkdir. Bu, istisnanın zəng edənə yayıldığı zaman bütün zəng yığın məlumatlarının qorunmasını təmin edir. Aşağıdakı nümunə bunu göstərir. Bir simli uzantı metodu, FindOccurrences, arqumentlərini əvvəlcədən təsdiq etmədən bir və ya daha çox zəngləri String.IndexOf (String, Int32) ilə tamamlayır.

Arayan şəxs FindOccurrences -a iki dəfə zəng vurur. FindOccurrences -ə edilən ikinci çağırışda, zəng edən şəxs String.IndexOf (String, Int32) metodunun bir ArgumentNullException istisnası yaratmasına səbəb olan axtarış sətri olaraq sıfır keçir. Bu istisna FindOccurrences metodu ilə idarə olunur və yenidən zəng edənə ötürülür. Tərk etmə ifadəsi heç bir ifadə olmadan istifadə edildiyindən, nümunənin çıxışı zəng yığınının qorunub saxlanıldığını göstərir.

Əksinə, istisna yenidən istifadə edilərsə

bəyanat, tam zəng yığını qorunmur və nümunə aşağıdakı çıxışı yaradacaq:

Bir az daha çətin alternativ, yeni bir istisna atmaq və orijinal istisnanın zəng yığın məlumatlarını daxili bir istisnada qorumaqdır. Arayan sonra yığın çərçivəsini və orijinal istisna haqqında digər məlumatları əldə etmək üçün yeni istisnanın InnerException xüsusiyyətindən istifadə edə bilər. Bu vəziyyətdə atma ifadəsi belədir:

İstisnanı idarə edən istifadəçi kodu, InnerException xüsusiyyətinin aşağıdakı istisna işləyicisində göstərildiyi kimi orijinal istisna haqqında məlumat olduğunu bilməlidir.

Standart istisnaların seçilməsi

İstisna atmaq məcburiyyətində qaldığınız zaman, xüsusi bir istisna tətbiq etmək əvəzinə .NET Framework -də tez -tez mövcud bir istisna növündən istifadə edə bilərsiniz. Bu iki şərt altında standart bir istisna növü istifadə etməlisiniz:

İstifadə səhvindən qaynaqlanan bir istisna atırsınız (yəni metodunuza zəng edən geliştirici tərəfindən edilən proqram məntiqindəki səhv). Tipik olaraq, ArgumentException, ArgumentNullException, InvalidOperationException və ya NotSupportedException kimi bir istisna qoyursunuz. İstisna obyekti qurarkən istisna obyektinin konstruktoruna verdiyiniz sim, xətanın təsvirini verməlidir ki, geliştirici onu düzəldə bilsin. Daha çox məlumat üçün Mesaj xüsusiyyətinə baxın.

Mövcud bir .NET Framework istisnası ilə zəng edənə bildirilə bilən bir səhvlə məşğul olursunuz. Mümkün olan ən çox əldə edilən istisnanı atmalısınız. Məsələn, bir metodun bir sayma növünün etibarlı bir üzvü olması üçün bir arqument tələb edərsə, bir ArgumentException deyil, bir InvalidEnumArgumentException (ən çox əldə edilən sinif) atmalısınız.

Aşağıdakı cədvəldə ümumi istisna növləri və onları atacağınız şərtlər verilmişdir.

İstisna Vəziyyət
ArgumentException Bir üsula ötürülən boş olmayan arqument etibarsızdır.
ArgumentNullException Bir üsula ötürülən bir arqument sıfırdır.
ArgumentOutOfRangeException Mübahisə etibarlı dəyərlər aralığının xaricindədir.
DirectoryNotFoundException Kataloq yolunun bir hissəsi etibarlı deyil.
DivideByZeroException Tam ədəd və ya Ondalık bölmə əməliyyatında məxrəc sıfırdır.
DriveNotFoundException Sürücü mövcud deyil və ya yoxdur.
FileNotFoundException Bir fayl yoxdur.
FormatException Parse kimi bir çevrilmə üsulu ilə bir sətirdən çevrilə biləcək bir dəyər uyğun bir formatda deyil.
IndexOutOfRangeException Bir indeks bir sıra və ya kolleksiyanın hüdudlarından kənardadır.
InvalidOperationException Metod çağırışı obyektin cari vəziyyətində etibarsızdır.
KeyNotFoundException Kolleksiyadakı bir üzvə daxil olmaq üçün göstərilən açar tapıla bilməz.
NotImplementedException Bir üsul və ya əməliyyat tətbiq edilmir.
NotSupportedException Bir üsul və ya əməliyyat dəstəklənmir.
ObjectDisposedException Atılan bir obyekt üzərində əməliyyat aparılır.
OverflowException Arifmetik, tökmə və ya çevrilmə əməliyyatı daşqınla nəticələnir.
PathTooLongException Bir yol və ya fayl adı, sistem tərəfindən təyin olunan maksimum uzunluğu aşır.
PlatformNotSupportedException Əməliyyat mövcud platformada dəstəklənmir.
Sıra İstisnası Yanlış sayda ölçüsü olan bir sıra bir üsula ötürülür.
Zaman aşımı istisnası Əməliyyata ayrılan vaxt intervalı bitdi.
UriFormatException Yanlış Vahid Resurs Tanımlayıcısı (URI) istifadə olunur.

Xüsusi istisnaların tətbiqi

Aşağıdakı hallarda, bir səhv vəziyyətini idarə etmək üçün mövcud bir .NET Framework istisnasından istifadə etmək kifayət deyil:

İstisna, mövcud bir .NET Framework istisnası ilə müqayisə oluna bilməyən unikal bir proqram səhvini əks etdirdikdə.

İstisna, mövcud bir .NET Framework istisnası üçün uyğun olan işlənmədən fərqli bir işləmə tələb edərkən və ya istisna oxşar bir istisnadan fərqləndirilməlidir. Məsələn, hədəf inteqral növü aralığından kənarda olan bir sətrin rəqəmsal təmsilçiliyini təhlil edərkən bir ArgumentOutOfRangeException istisnası atsanız, zəng edənin uyğun məhdudlaşdırma təmin etməməsindən qaynaqlanan bir səhv üçün eyni istisnanı istifadə etmək istəməzsiniz. metodu çağırarkən dəyərlər.

İstisna sinfi .NET Frameworkdəki bütün istisnaların əsas sinifidir. Bir çox mənşəli siniflər İstisna üzvlərinin irsi davranışlarına əsaslanır, İstisna üzvlərini ləğv etmirlər və heç bir bənzərsiz üzv təyin etmirlər.

İstisna sinifinizi təyin etmək üçün:

İstisnadan miras qalan bir sinif təyin edin. Gerekirse, istisna haqqında əlavə məlumat vermək üçün sinifinizə lazım olan hər hansı bir unikal üzv təyin edin. Məsələn, ArgumentException sinifinə, arqumenti istisnaya səbəb olan parametrin adını təyin edən bir ParamName xassəsi və RegexMatchTimeoutException xüsusiyyətinə də zaman aşımı aralığını göstərən MatchTimeout xassəsi daxildir.

Gerekirse, funksionallığını dəyişdirmək və ya dəyişdirmək istədiyiniz miras alınmış üzvlərin hamısını ləğv edin. Qeyd edək ki, mövcud olan İstisna siniflərinin əksəriyyəti miras alınan üzvlərin davranışını ləğv etmir.

Xüsusi istisna obyektinizin seriallaşdırıla biləcəyini müəyyənləşdirin. Serializasiya, istisna haqqında məlumatları saxlamağa imkan verir və istisna məlumatlarının uzaq bir kontekstdə bir server və müştəri proxy tərəfindən paylaşılmasına icazə verir. İstisna obyektini seriallaşdırıla bilən etmək üçün onu SerializableAttribute atributu ilə qeyd edin.

İstisna sinifinizin qurucularını müəyyənləşdirin. Tipik olaraq, istisna siniflərində aşağıdakı konstruktorlardan biri və ya bir neçəsi var:

Yeni bir istisna obyektinin xüsusiyyətlərini başlatmaq üçün standart dəyərlərdən istifadə edən Exception ().

İstisna (String), müəyyən bir səhv mesajı olan yeni bir istisna obyektini işə salır.

Müəyyən bir səhv mesajı və daxili istisna ilə yeni bir istisna obyektini işə salan İstisna (String, Exception).

İstisna (SerializationInfo, StreamingContext), seriallaşdırılmış məlumatlardan yeni bir istisna obyekti başlatan qorunan bir konstruktordur. İstisna obyektinizi seriallaşdırıla bilən hala gətirmisinizsə, bu konstruktoru tətbiq etməlisiniz.

Aşağıdakı nümunə xüsusi bir istisna sinifinin istifadəsini göstərir. Müştəri sadə olmayan bir başlanğıc nömrəsi göstərərək sadə ədədlər ardıcıllığını əldə etməyə çalışdıqda atılan NotPrimeException istisnasını təyin edir. İstisna, istisnaya səbəb olan qeyri-sadə nömrəni qaytaran yeni bir xüsusiyyət olan NonPrime təyin edir. SerializationInfo və StreamingContext parametrləri ilə qorunan parametrsiz bir konstruktor və seriyalaşdırma üçün bir konstruktor tətbiq etməklə yanaşı, NotPrimeException sinfi NonPrime xüsusiyyətini dəstəkləmək üçün üç əlavə konstruktor təyin edir. Hər bir konstruktor, qeyri-adi ədədin dəyərini qorumaqla yanaşı, əsas sinif qurucusunu da çağırır. NotPrimeException sinfi də SerializableAttribute atributu ilə qeyd olunur.

Aşağıdakı nümunədə göstərilən PrimeNumberGenerator sinfi, Eratosthenes Sieve -dən istifadə edərək, 2 -dən başlayaraq sinif qurucusuna edilən zəngdə müştəri tərəfindən təyin olunan bir həddə qədər ardıcıllığını hesablayır. GetPrimesFrom metodu, müəyyən edilmiş aşağı həddən böyük və ya ona bərabər olan bütün baş ədədləri qaytarır, lakin bu aşağı hədd bir ədəd deyilsə, NotPrimeException atır.

Aşağıdakı nümunə, GetPrimesFrom metoduna sadə olmayan nömrələrlə iki zəng edir, onlardan biri tətbiq sahə sərhədlərini aşır. Hər iki halda da istisna atılır və müştəri kodunda uğurla işlənir.

Windows İşləmə vaxtı və .NET Framework 4.5.1

Windows 8 üçün .NET-də Windows 8 üçün tətbiqetmələrdə, bəzi istisna məlumatları, bir istisna qeyri-NET Framework yığın çərçivələri vasitəsilə yayıldıqda itirilir. .NET Framework 4.5.1 və Windows 8.1 ilə başlayaraq, ümumi dil iş vaxtı, bu istisna qeyri-NET Framework yığın çərçivəsində dəyişdirilməyincə atılan orijinal İstisna obyektini istifadə etməyə davam edir.