{"id":33620,"date":"2014-09-09T13:02:00","date_gmt":"2014-09-09T10:02:00","guid":{"rendered":"https:\/\/fatihboy.com\/?p=33620"},"modified":"2021-06-19T11:50:57","modified_gmt":"2021-06-19T08:50:57","slug":"csharp-6-istisna-filtreleri","status":"publish","type":"post","link":"https:\/\/fatihboy.com\/en\/csharp-6-istisna-filtreleri\/","title":{"rendered":"C# 6.0 \u2013 \u0130stisna Filtreleri"},"content":{"rendered":"<p>&nbsp;&nbsp; <strong>\u0130stisna Filtreleri (Exception Filters),<\/strong> bence C# 6 ile birlikte gelen \u00f6nemli, bir o kadar da dikkatle yakla\u015f\u0131lmas\u0131 gereken bir yenilik. Al\u0131\u015fa geldi\u011fimiz try-catch bloklar\u0131nda yakalanan istisnan\u0131n hangi i\u015f mant\u0131\u011f\u0131 blo\u011funca i\u015flenece\u011fi tek bir kritere ba\u011fl\u0131d\u0131r; <em>istisnan\u0131n t\u00fcr\u00fc<\/em>. C# 6 ile birlikte bu mant\u0131k bir ad\u0131m ileri ta\u015f\u0131narak ek bir kontrol c\u00fcmleci\u011fi ile daha iyi bir istisna yakalama mekanizmas\u0131 kuruluyor. C# i\u00e7in bu bir yenilik olsa da VB ve F# buna uzun zamand\u0131r sahipti.<\/p>\n\n\n\n<p>&nbsp;&nbsp; A\u015fa\u011f\u0131da hali haz\u0131rda kulland\u0131\u011f\u0131m\u0131z try-catch blo\u011funa bir \u00f6rnek bulabilirsiniz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">try {\n    \/\/\u0130\u015f mant\u0131\u011f\u0131\n} catch (YakalamakIstedigimizException e) {\n    \/\/\u0130stisna yakalama i\u015f mant\u0131\u011f\u0131\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rne\u011fimize <em>finally<\/em> blo\u011fu ya da yeni <em>catch<\/em> bloklar\u0131 ekleyebiliriz. \u0130stisna filteleri ile birlikte catch\u2019in s\u00f6z diziminde de\u011fi\u015fli\u011fe gidilerek ko\u015ful konulabilmesi ad\u0131na if blo\u011fu eklenmi\u015ftir. Buna g\u00f6re, ayn\u0131 try-catch blo\u011funda art\u0131k a\u015fa\u011f\u0131daki \u015fekilde filtreleme yapabiliriz;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"3\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">try {\n    \/\/\u0130\u015f mant\u0131\u011f\u0131\n} catch (YakalamakIstedigimizException e) if (IstisnaKosulu(e)) {\n    \/\/\u0130stisna yakalama i\u015f mant\u0131\u011f\u0131\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">private static bool IstisnaKosulu(Exception ex) {\n    \/\/Filtreleme i\u015f mant\u0131\u011f\u0131\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; \u00d6rne\u011fimizde yer alan if blo\u011fu daha \u00f6nce kulland\u0131\u011f\u0131m\u0131z if blo\u011fundan farks\u0131z.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"3\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">try {\n    \/\/\u0130\u015f mant\u0131\u011f\u0131\n    throw new Exception();\n} catch (YakalamakIstedigimizException e) if (IstisnaKosulu(e)) {\n    \/\/\u0130stisna yakalama i\u015f mant\u0131\u011f\u0131\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Yukar\u0131daki \u00f6rnekte i\u015f mant\u0131\u011f\u0131m\u0131z i\u00e7erisinde bir Exception at\u0131lmaktad\u0131r. Bu durumda CLR \u00f6ncelikle daha \u00f6nceden yapt\u0131\u011f\u0131 gibi catch bloklar\u0131 aras\u0131nda bu t\u00fcr\u00fc yakalayabilecek bir blok olup olmad\u0131\u011f\u0131n\u0131 kontrol edecektir. \u00d6rne\u011fimizde uygun blok olmad\u0131\u011f\u0131 i\u00e7in istisna y\u00f6netilemeyecektir. Di\u011fer yandan a\u015fa\u011f\u0131daki \u00f6rne\u011fimizi ele alal\u0131m;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"3\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">try {\n    \/\/\u0130\u015f mant\u0131\u011f\u0131\n    throw new YakalamakIstedigimizException();\n} catch (YakalamakIstedigimizException e) if (IstisnaKosulu(e)) {\n    \/\/\u0130stisna yakalama i\u015f mant\u0131\u011f\u0131\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu \u00f6rnekte, f\u0131rlat\u0131lan YakalamakIstedigimizException istisnas\u0131 yakalayabilecek bir blok bulunmaktad\u0131r. Bu durumda CLR blok i\u00e7in bir ko\u015ful olup olmad\u0131\u011f\u0131na bakacakt\u0131r. Ko\u015ful olmas\u0131 durumunda ko\u015ful blo\u011fu i\u015fletilerek istisnan\u0131n catch blo\u011funca y\u00f6netilik y\u00f6netilmeyece\u011fine karar verecektir.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"4,6\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">try {\n    \/\/\u0130\u015f mant\u0131\u011f\u0131\n    throw new YakalamakIstedigimizException();\n} catch (YakalamakIstedigimizException e) if (IstisnaKosulu1(e)) {\n    \/\/\u0130stisna yakalama i\u015f mant\u0131\u011f\u0131-1\n} catch (YakalamakIstedigimizException e) if (IstisnaKosulu2(e)) {\n    \/\/\u0130stisna yakalama i\u015f mant\u0131\u011f\u0131-2\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Dikkat ederseniz yukar\u0131da payla\u015ft\u0131\u011f\u0131m \u00f6rnekte her catch blo\u011fuda ayn\u0131 t\u00fcr i\u00e7in i\u015flem yapmakta; fakat farkl\u0131 ko\u015fullara sahip. CLR taraf\u0131ndan i\u015fletilen istisna filtrelemesi daha \u00f6nceden de oldu\u011fu gibi yukar\u0131dan a\u015fa\u011f\u0131ya do\u011fru yap\u0131lacakt\u0131r. \u0130lk uygun blo\u011fun bulunmas\u0131 durumunda daha fazla arama yap\u0131lmayarak bu blok i\u015fletilecektir.<\/p>\n\n\n\n<p>&nbsp;&nbsp; \u0130stisna filtreleri ile birlikte en g\u00fczel kazan\u0131m\u0131m\u0131z stack trace\u2019i kaybetmemek. Ok, asl\u0131nda kazan\u0131m demek do\u011fru olmayacakt\u0131r; \u00e7\u00fcnk\u00fc \u00f6nceden de throw kullanarak kaybetmeyebiliyorduk \ud83d\ude09 Son \u00f6rne\u011fimize geri d\u00f6nelim. Ayn\u0131 \u00f6rne\u011fi istisna filtreleme kullanmadan a\u015fa\u011f\u0131daki \u015fekilde yazabilirdik;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"10\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">try {\n    \/\/\u0130\u015f mant\u0131\u011f\u0131\n    throw new YakalamakIstedigimizException();\n} catch (YakalamakIstedigimizException e) {\n    if (IstisnaKosulu1(e)) {\n        \/\/\u0130stisna yakalama i\u015f mant\u0131\u011f\u0131-1\n    }else if (IstisnaKosulu2(e)) {\n        \/\/\u0130stisna yakalama i\u015f mant\u0131\u011f\u0131-2\n    }else{\n        throw ex;\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu kod ile ilgili en b\u00fcy\u00fck problem her iki ko\u015fula da uymayan istisnalarda throw ex sat\u0131r\u0131 ile birlikte istisnaya dair stack trace\u2019i kaybetmemizdi. Bu da istisnay\u0131 \u00e7\u00f6zmeye \u00e7al\u0131\u015f\u0131rken bize zaman kaybettirecektir. Tabi biraz daha deneyimli&nbsp; bir yaz\u0131l\u0131mc\u0131 iseniz bu tuza\u011fa d\u00fc\u015fmeyip kodu \u015fu \u015fekilde yazard\u0131n\u0131z;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"10\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">try {\n    \/\/\u0130\u015f mant\u0131\u011f\u0131\n    throw new YakalamakIstedigimizException();\n} catch (YakalamakIstedigimizException e) {\n    if (IstisnaKosulu1(e)) {\n        \/\/\u0130stisna yakalama i\u015f mant\u0131\u011f\u0131-1\n    }else if (IstisnaKosulu2(e)) {\n        \/\/\u0130stisna yakalama i\u015f mant\u0131\u011f\u0131-2\n    }else{\n        throw;\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Bu sayede y\u00f6netemedi\u011finiz istisnalarda stack trace\u2019i yok etmemi\u015f olurdunuz. \u0130\u015fte istisna filtreleme ile gelen kazan\u0131mlardan birisi de bu. Junior bir yaz\u0131l\u0131mc\u0131 da art\u0131k fark\u0131nda olmadan b\u00f6ylesi bir kullan\u0131ma y\u00f6nlendiriliyor, bu \u015fekilde bir kod \u00e7\u0131km\u0131\u015f oluyor \ud83d\ude09<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bu \u015fekildeki bir kod iyile\u015ftirmesinin yan\u0131nda istisna filtrelerinin daha \u201c<em>ulvi<\/em>\u201d ama\u00e7lar i\u00e7inde kullan\u0131ma a\u00e7\u0131k oldu\u011funu s\u00f6ylemeden ge\u00e7emeyece\u011fim. bakt\u0131\u011f\u0131n\u0131z zaman en nihayetinde istisna olu\u015ftu\u011funda CLR ilgili catch blo\u011funun kullan\u0131l\u0131p kullan\u0131lmayaca\u011f\u0131na karar vermek i\u00e7in \u00f6ncelikle if blo\u011funu i\u015fletecektir. Bu bak\u0131\u015f a\u00e7\u0131s\u0131 ile a\u015fa\u011f\u0131daki kod par\u00e7ac\u0131\u011f\u0131n\u0131 inceleyelim;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"4,14\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">try {\n    \/\/\u0130\u015f mant\u0131\u011f\u0131\n    throw new YakalamakIstedigimizException();\n} catch (Exception e) if (SadeceIstisnayiLogla(e)) {\n    \/\/Buras\u0131 hi\u00e7 bir zaman i\u015fletilmeyecek...\n} catch (YakalamakIstedigimizException e) if (IstisnaKosulu1(e)) {\n    \/\/\u0130stisna yakalama i\u015f mant\u0131\u011f\u0131-1\n}\ncatch (YakalamakIstedigimizException e) if (IstisnaKosulu2(e)) {\n    \/\/\u0130stisna yakalama i\u015f mant\u0131\u011f\u0131-2\n} \n\nprivate static bool SadeceIstisnayiLogla(Exception ex) {\n    \/\/Sadece olu\u015fan istisnay\u0131 logla\n\n    return false;\n}\n\nprivate static bool IstisnaKosulu1(Exception ex) {\n    \/\/Filtreleme i\u015f mant\u0131\u011f\u0131\n}\n\nprivate static bool IstisnaKosulu2(Exception ex) {\n    \/\/Filtreleme i\u015f mant\u0131\u011f\u0131\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Dikkat ederseniz \u00f6rne\u011fimizde ilk catch blo\u011funca kullan\u0131lan ko\u015ful fonksiyonumuz <strong>SadeceIstisnayiLogla her zaman i\u00e7in false de\u011fer d\u00f6nmekte<\/strong>. Bunun anlam\u0131 bu catch blo\u011fu hi\u00e7 bir zaman i\u015fletilmeyecek. \u00d6te yandan CLR buna karar vermek i\u00e7in her zaman SadeceIstisnayiLogla fonksiyonunu \u00e7al\u0131\u015ft\u0131racak. Blo\u011fumuzun catch bloklar\u0131 aras\u0131nda ilk s\u0131rada olmas\u0131 nedeniyle her istisnada mutlaka istisnay\u0131 y\u00f6netmekte kullan\u0131l\u0131p kullan\u0131lmayaca\u011f\u0131 kontrol edilecek. Bu durumda yaz\u0131l\u0131m geli\u015ftirici olarak <strong>SadeceIstisnayiLogla fonksiyonu i\u00e7erisine istisnaya dair loglama i\u015flemlerini koyabilirim<\/strong>. Fonksiyonum try-catch blo\u011fundaki y\u00f6netilen\/y\u00f6netilmeyen b\u00fct\u00fcn istisnalar i\u00e7in \u00e7al\u0131\u015ft\u0131r\u0131lacak ve bu i\u015flemlerde<strong> stack trace hi\u00e7 bir \u015fekilde etkilenmeyecek<\/strong>\u2026 Harika de\u011fil mi!!<\/p>\n\n\n\n<p>&nbsp;&nbsp; Makalemin \u015fimdiye kadar ki b\u00f6l\u00fcmlerinde size \u0130stisna Filtrelerinin hep g\u00fczel taraflar\u0131n\u0131 payla\u015ft\u0131m, kabul ediyorum. \u015eimdiii, s\u0131ra geldi s\u0131k\u0131nt\u0131 olu\u015fturabilecek yanlar\u0131na\u2026 Hat\u0131rlarsan\u0131z yaz\u0131m\u0131n daha hemen ba\u015f\u0131nda bu \u00f6zelli\u011fin \u00f6nceden beri VB ve F#\u2019ta bulundu\u011fundan bahsetmi\u015ftim. Bu \u00f6zelli\u011fin C# ge\u00e7 gelmesinin elbette mant\u0131kl\u0131 bir nedeni var \ud83d\ude09<\/p>\n\n\n\n<p>&nbsp;&nbsp; Ba\u015ftan belirtmeliyim; <strong>istisna filtreleri g\u00fc\u00e7l\u00fc oldu\u011fu kadar tehlikeli de olabilir<\/strong>\u2026 A\u015fa\u011f\u0131daki konsol uygulamam\u0131z\u0131 inceleyip konsola ne \u00e7\u0131kt\u0131 verece\u011fini tahmin etmeye \u00e7al\u0131\u015f\u0131n;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"csharp\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">using System;\n\nnamespace Com.Enterprisecoding.IstisnaFiltresi {\n    class Program {\n        static void Main(string[] args) {\n            try {\n                try {\n                    Console.Write(\"A\");\n\n                    throw new Exception();\n                }\n                finally {\n                    Console.Write(\"B\");\n                }\n            }\n            catch (Exception ex) if (IstisnaKosulu(ex)){\n                Console.Write(\"C\");\n            }\n            catch (Exception) {\n                Console.Write(\"D\");\n            }\n\n            Console.Write(\"F\");\n        }\n\n        public static bool IstisnaKosulu(Exception ex) {\n            Console.Write(\"E\");\n            return true;\n        }\n    }\n}<\/pre>\n\n\n\n<p>&nbsp;&nbsp; Uygulamay\u0131 Visual Studio\u2018da denemedi\u011finizi umuyorum\u2026 Ard\u0131l harfleri kullanmam nedeniyle eminim ki ABCDEF yan\u0131t\u0131 verenleriniz olmu\u015ftur. Kabul ediyorum, ard\u0131l harfler yan\u0131ltmacayd\u0131. En \u015fansl\u0131 tahmininiz ABECF olabilir mi? Hay\u0131r o da de\u011fil! Do\u011fru yan\u0131t <strong>AEBCF<\/strong>.&nbsp;&nbsp; \u015ea\u015f\u0131rd\u0131n\u0131z de\u011fil mi! finally blo\u011fundan \u00f6nce \u00e7al\u0131\u015fan ve d\u0131kapsamda yer alan bir istisna filtresi! Evet do\u011fru\u2026 C#\u2019ta al\u0131\u015fk\u0131n olmad\u0131\u011f\u0131m\u0131z \u015fekilde i\u00e7 i\u00e7e ge\u00e7mi\u015f bir <em>kapsam (scope)<\/em> y\u00f6netimi!<\/p>\n\n\n\n<p>&nbsp;&nbsp; Uygulaman\u0131n i\u00e7erdeki finally blo\u011funu \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce d\u0131\u015fardaki istisna filtresini \u00e7al\u0131\u015ft\u0131rmas\u0131 tamamen CLR\u2019\u0131n istisna y\u00f6netim mant\u0131\u011f\u0131na dayanmakta. Konunun daha da derinine inecek olursak CLR\u2019in istisna y\u00f6netim mant\u0131\u011f\u0131 da Windows\u2019un istisna y\u00f6netimi ile uyumlu \u00e7al\u0131\u015fmas\u0131 gereksinimden do\u011fmakta. Windows\u2019un istisna y\u00f6netimi konusunda bilgi sahibi olmayanlar\u0131n\u0131z i\u00e7in kesinlikle daha \u00f6nceden payla\u015ft\u0131\u011f\u0131m <a href=\"\/en\/?p=8637\" target=\"_blank\" rel=\"noopener noreferrer\">bu makaleyi okuman\u0131z\u0131<\/a> ya da Enterprisecoding TV\u2019de yay\u0131nlanan <a href=\"https:\/\/fatihboy.com\/en\/post\/csharp-uygulamalarinda-hata-ayiklama\/\" target=\"_blank\" rel=\"noopener noreferrer\">bu videoyu izlemenizi<\/a> tavsiye ederim.<\/p>\n\n\n\n<p>&nbsp;&nbsp; CLR istisna y\u00f6netimi <strong>iki fazl\u0131<\/strong> bir i\u015flem ger\u00e7ekle\u015ftirir. Bir istisna olu\u015ftu\u011fu zaman ilk fazda bu istisnay\u0131 y\u00f6netebilecek bir blok olup olmad\u0131\u011f\u0131 analiz edilir. Bu fazdaki ama\u00e7 uygulaman\u0131n istisnay\u0131 y\u00f6netip y\u00f6netmedi\u011finin ortaya \u00e7\u0131kmas\u0131 oldu\u011fu i\u00e7in sadece catch bloklar\u0131 incelenir. finally bloklar\u0131 hen\u00fcz bir i\u015flem ger\u00e7ekle\u015ftirilmeyece\u011fi i\u00e7in g\u00f6z ard\u0131 edilir. Hata y\u00f6netim bloklar\u0131n\u0131n tespiti ard\u0131ndan ikinci faz\u2019a ge\u00e7ilir. \u0130kinci faz art\u0131k istisnan\u0131n y\u00f6netimi faz\u0131d\u0131r. finally ve tespit edilen catch bloklar\u0131 ger\u00e7ekte bu fazda \u00e7al\u0131\u015ft\u0131r\u0131lacakt\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bu s\u00fcre\u00e7 \u015fimdiye kadar kulland\u0131\u011f\u0131m\u0131z try-catch bloklar\u0131nda s\u0131k\u0131nt\u0131s\u0131z i\u015flemekteydi. CLR yine kar\u015f\u0131la\u015ft\u0131rma yap\u0131yordu; fakat biz yaz\u0131l\u0131m geli\u015ftiricilerin yazd\u0131\u011f\u0131 kod par\u00e7ac\u0131klar\u0131 olmadan, sadece catch bloklar\u0131nda belirtti\u011fimiz t\u00fcrler kar\u015f\u0131la\u015ft\u0131r\u0131larak. Bu durumda s\u00fcre\u00e7 ayn\u0131 olmas\u0131na ra\u011fmen yukar\u0131daki gibi bir durumla kar\u015f\u0131la\u015fm\u0131yorduk. Durum i\u015fin i\u00e7ine istisna filtrelemesinin girmesiyle de\u011fi\u015fti. \u0130stisna filtreleri ile birlikte CLR ilk fazda sadece t\u00fcr kar\u015f\u0131la\u015ft\u0131rmas\u0131 de\u011fil, ayn\u0131 zamanda bir if blo\u011fu da \u00e7al\u0131\u015ft\u0131rmak zorunda. Yani, \u00f6rne\u011fimizde oldu\u011fu gibi, alt kapsam hen\u00fcz sonu\u00e7lanmadan \u00fcst kapsama ait kod par\u00e7ac\u0131klar\u0131 \u00e7al\u0131\u015fabiliyor.<\/p>\n\n\n\n<p>&nbsp; CLR\u2019\u0131n istisna y\u00f6netimindeki bu yakla\u015f\u0131m\u0131 yaz\u0131l\u0131mc\u0131lar\u0131n daha dikkatli davranmas\u0131n\u0131 gerektiriyor. Finally bloklar\u0131n\u0131n birincil amac\u0131n\u0131n try-catch blo\u011fu i\u00e7erisinde kullan\u0131lan ve istisna nedeniyle d\u00fczg\u00fcn \u015fekilde iade edilememi\u015f sistem kaynaklar\u0131n\u0131n do\u011fru \u015fekilde teslim edilmesi oldu\u011funun alt\u0131n\u0131 \u00e7iziyorum. finally blo\u011fundan \u00f6nce sahne alan istisna filtrelerinin \u00e7al\u0131\u015fmas\u0131 s\u0131ras\u0131nda bu sistem kaynaklar\u0131 do\u011fru stat\u00fclerde ve sa\u011fl\u0131kl\u0131 durumda olmayabilir. Bu bak\u0131\u015f a\u00e7\u0131s\u0131yla, istisna filtrelerinde try-catch bloklar\u0131nda bulunan kaynaklar\u0131n kullan\u0131lmamas\u0131 daha do\u011fru bir yakla\u015f\u0131m olacakt\u0131r.<\/p>\n\n\n\n<p>&nbsp;&nbsp; Bu konuda dikkatinizi \u00e7ekmek istedi\u011fim bir nokta da <strong>using bloklar\u0131<\/strong> olacak. Bildi\u011finiz gibi using bloklar\u0131, bir sistem kayna\u011f\u0131n\u0131n blok ile belirtilen kapsam sonland\u0131\u011f\u0131ndan sisteme iade edilmesi mant\u0131\u011f\u0131na dayal\u0131d\u0131r. Derleyici taraf\u0131ndan \u00fcretilen kodlar incelenecek olursa using bloklar\u0131n\u0131n da try-catch \u00fczerine kurguland\u0131\u011f\u0131 g\u00f6r\u00fclecektir. Bu bilgiler \u0131\u015f\u0131\u011f\u0131nda yukar\u0131da payla\u015ft\u0131\u011f\u0131m kurgu using bloklar\u0131 i\u00e7in de ge\u00e7erli olaca\u011f\u0131 i\u00e7in <strong>ayn\u0131 hassasiyetin using bloklar\u0131 i\u00e7in de g\u00f6sterilmesi \u00f6nemlidir<\/strong>.<\/p>","protected":false},"excerpt":{"rendered":"<p>&nbsp;&nbsp; \u0130stisna Filtreleri (Exception Filters), bence C# 6 ile birlikte gelen \u00f6nemli, bir o kadar da dikkatle yakla\u015f\u0131lmas\u0131 gereken bir yenilik. Al\u0131\u015fa geldi\u011fimiz try-catch bloklar\u0131nda yakalanan istisnan\u0131n hangi i\u015f mant\u0131\u011f\u0131 blo\u011funca i\u015flenece\u011fi tek bir kritere ba\u011fl\u0131d\u0131r; istisnan\u0131n t\u00fcr\u00fc. C# 6 ile birlikte bu mant\u0131k bir ad\u0131m ileri ta\u015f\u0131narak ek bir kontrol c\u00fcmleci\u011fi ile daha iyi&#8230;<\/p>\n<p><a class=\"read-more\" href=\"https:\/\/fatihboy.com\/en\/csharp-6-istisna-filtreleri\/\">Read More<\/a><\/p>","protected":false},"author":1,"featured_media":33621,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77,28],"tags":[41,324],"class_list":["post-33620","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-csharp","category-turkce","tag-c","tag-c-6"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>C# 6.0 \u2013 \u0130stisna Filtreleri - Fatih Boy<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihboy.com\/en\/csharp-6-istisna-filtreleri\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"C# 6.0 \u2013 \u0130stisna Filtreleri - Fatih Boy\" \/>\n<meta property=\"og:description\" content=\"&nbsp;&nbsp; \u0130stisna Filtreleri (Exception Filters), bence C# 6 ile birlikte gelen \u00f6nemli, bir o kadar da dikkatle yakla\u015f\u0131lmas\u0131 gereken bir yenilik. Al\u0131\u015fa geldi\u011fimiz try-catch bloklar\u0131nda yakalanan istisnan\u0131n hangi i\u015f mant\u0131\u011f\u0131 blo\u011funca i\u015flenece\u011fi tek bir kritere ba\u011fl\u0131d\u0131r; istisnan\u0131n t\u00fcr\u00fc. C# 6 ile birlikte bu mant\u0131k bir ad\u0131m ileri ta\u015f\u0131narak ek bir kontrol c\u00fcmleci\u011fi ile daha iyi...Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihboy.com\/en\/csharp-6-istisna-filtreleri\/\" \/>\n<meta property=\"og:site_name\" content=\"Fatih Boy\" \/>\n<meta property=\"article:published_time\" content=\"2014-09-09T10:02:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-06-19T08:50:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/exception-man.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Fatih Boy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Boy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/\"},\"author\":{\"name\":\"Fatih Boy\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"headline\":\"C# 6.0 \u2013 \u0130stisna Filtreleri\",\"datePublished\":\"2014-09-09T10:02:00+00:00\",\"dateModified\":\"2021-06-19T08:50:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/\"},\"wordCount\":1426,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/exception-man.jpg\",\"keywords\":[\"C#\",\"C# 6\"],\"articleSection\":[\"C#\",\"T\u00fcrk\u00e7e\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/\",\"url\":\"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/\",\"name\":\"C# 6.0 \u2013 \u0130stisna Filtreleri - Fatih Boy\",\"isPartOf\":{\"@id\":\"https:\/\/fatihboy.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/exception-man.jpg\",\"datePublished\":\"2014-09-09T10:02:00+00:00\",\"dateModified\":\"2021-06-19T08:50:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#primaryimage\",\"url\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/exception-man.jpg\",\"contentUrl\":\"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/exception-man.jpg\",\"width\":1800,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fatihboy.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C# 6.0 \u2013 \u0130stisna Filtreleri\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihboy.com\/#website\",\"url\":\"https:\/\/fatihboy.com\/\",\"name\":\"Fatih Boy\",\"description\":\"Ki\u015fisel Web Sitesi\",\"publisher\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihboy.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158\",\"name\":\"Fatih Boy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g\",\"caption\":\"Fatih Boy\"},\"logo\":{\"@id\":\"https:\/\/fatihboy.com\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/fatihboy.com\"],\"url\":\"https:\/\/fatihboy.com\/en\/author\/fatih\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C# 6.0 \u2013 \u0130stisna Filtreleri - Fatih Boy","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihboy.com\/en\/csharp-6-istisna-filtreleri\/","og_locale":"en_US","og_type":"article","og_title":"C# 6.0 \u2013 \u0130stisna Filtreleri - Fatih Boy","og_description":"&nbsp;&nbsp; \u0130stisna Filtreleri (Exception Filters), bence C# 6 ile birlikte gelen \u00f6nemli, bir o kadar da dikkatle yakla\u015f\u0131lmas\u0131 gereken bir yenilik. Al\u0131\u015fa geldi\u011fimiz try-catch bloklar\u0131nda yakalanan istisnan\u0131n hangi i\u015f mant\u0131\u011f\u0131 blo\u011funca i\u015flenece\u011fi tek bir kritere ba\u011fl\u0131d\u0131r; istisnan\u0131n t\u00fcr\u00fc. C# 6 ile birlikte bu mant\u0131k bir ad\u0131m ileri ta\u015f\u0131narak ek bir kontrol c\u00fcmleci\u011fi ile daha iyi...Read More","og_url":"https:\/\/fatihboy.com\/en\/csharp-6-istisna-filtreleri\/","og_site_name":"Fatih Boy","article_published_time":"2014-09-09T10:02:00+00:00","article_modified_time":"2021-06-19T08:50:57+00:00","og_image":[{"width":1800,"height":1080,"url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/exception-man.jpg","type":"image\/jpeg"}],"author":"Fatih Boy","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Fatih Boy","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#article","isPartOf":{"@id":"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/"},"author":{"name":"Fatih Boy","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"headline":"C# 6.0 \u2013 \u0130stisna Filtreleri","datePublished":"2014-09-09T10:02:00+00:00","dateModified":"2021-06-19T08:50:57+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/"},"wordCount":1426,"commentCount":0,"publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"image":{"@id":"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/exception-man.jpg","keywords":["C#","C# 6"],"articleSection":["C#","T\u00fcrk\u00e7e"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/","url":"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/","name":"C# 6.0 \u2013 \u0130stisna Filtreleri - Fatih Boy","isPartOf":{"@id":"https:\/\/fatihboy.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#primaryimage"},"image":{"@id":"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#primaryimage"},"thumbnailUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/exception-man.jpg","datePublished":"2014-09-09T10:02:00+00:00","dateModified":"2021-06-19T08:50:57+00:00","breadcrumb":{"@id":"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#primaryimage","url":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/exception-man.jpg","contentUrl":"https:\/\/fatihboy.com\/wp-content\/uploads\/2021\/06\/exception-man.jpg","width":1800,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/fatihboy.com\/csharp-6-istisna-filtreleri\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fatihboy.com\/"},{"@type":"ListItem","position":2,"name":"C# 6.0 \u2013 \u0130stisna Filtreleri"}]},{"@type":"WebSite","@id":"https:\/\/fatihboy.com\/#website","url":"https:\/\/fatihboy.com\/","name":"Fatih Boy","description":"Ki\u015fisel Web Sitesi","publisher":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihboy.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/6b06a41d42eed36eaa0780fbeb774158","name":"Fatih Boy","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5b3de123ad95a2ffe30b75a54cee98b55f65185c6d6805b35088a3d945f2feb4?s=96&d=mm&r=g","caption":"Fatih Boy"},"logo":{"@id":"https:\/\/fatihboy.com\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/fatihboy.com"],"url":"https:\/\/fatihboy.com\/en\/author\/fatih\/"}]}},"brizy_media":[],"_links":{"self":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33620","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/comments?post=33620"}],"version-history":[{"count":1,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33620\/revisions"}],"predecessor-version":[{"id":33622,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/posts\/33620\/revisions\/33622"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media\/33621"}],"wp:attachment":[{"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/media?parent=33620"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/categories?post=33620"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihboy.com\/en\/wp-json\/wp\/v2\/tags?post=33620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}