C# Exception Filters

Exception Filter, C# 6.0 ile birlikte tanıtıldı. Bir catch bloğu ile birlikte koşulu belirtmemize izin verir. C#, catch bloğuyla birlikte bir koşulun (veya filtrenin) when anahtar kelimeyle uygulanmasını sağlar.

C# Exception Filter Syntax (Sözdizimi)

catch (ArgumentException e) when (e.ParamName == "?"){  }    

Bir catch bloğu, yalnızca koşul doğru olduğunda yürütülür. Koşul yanlışsa, catch bloğu atlanır ve derleyici bir sonraki catch işleyicisini arar.

Aşağıdaki örnekte, exception filter uyguluyoruz. Yalnızca derleyici bir IndexOutOfRangeException istisnası atarsa ​​yürütülür.

using System;  
namespace CSharpFeatures  
{  
    class ExceptionFilter  
    {  
        public static void Main(string[] args)  
        {  
            try  
            {  
                int[] a = new int[5];  
                a[10] = 12;  
            }
            catch(Exception e) when(e.GetType().ToString() == "System.IndexOutOfRangeException")  
            {  

                SomeOtherTask();  
            }  
        }  
        static void SomeOtherTask()  
        {  
            Console.WriteLine("A new task is executing...");  
        }  
    }  
}  

Sonuç:

A new task is executing...

Örnek 2:

using System;  
namespace CSharpFeatures  
{  
    class ExceptionFilter  
    {  
        public static void Main(string[] args)  
        {  
            try  
            {  

                throw new IndexOutOfRangeException("Array Exception Occured");  
            }catch(Exception e) when(e.Message == "Array Exception Occured")  
            {  
                Console.WriteLine(e.Message);  
                SomeOtherTask();  
            }  
        }  
        static void SomeOtherTask()  
        {  
            Console.WriteLine("A new task is executing...");  
        }  
    }  
}  

Sonuç:

rray Exception Occured
A new task is executing...