📜  C#6.0 异常过滤器

📅  最后修改于: 2020-11-01 03:04:50             🧑  作者: Mango

C#异常过滤器

C#异常过滤器是C#编程语言的功能。它在C#6.0版本中引入。它允许我们指定条件以及catch块。

C#提供when关键字以与catch块一起应用条件(或过滤器)。

仅当条件为true时,catch块才会执行。如果条件为假,则跳过catch块,并且编译器搜索下一个catch处理程序。

C#异常过滤器用于记录目的。

C#异常过滤器语法

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

在下面的示例中,我们正在实现异常过滤器。仅在编译器抛出IndexOutOfRangeException异常时执行。

C#异常过滤器示例

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")
            {
                // Executing some other task
                SomeOtherTask();
            }
        }
        static void SomeOtherTask()
        {
            Console.WriteLine("A new task is executing...");
        }
    }
}

输出量

A new task is executing...

在下面的示例中,我们显式抛出与when条件匹配的异常。

C#异常过滤器示例2

using System;
namespace CSharpFeatures
{
    class ExceptionFilter
    {
        public static void Main(string[] args)
        {
            try
            {
                // Throwing Exception explicitly
                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...");
        }
    }
}

输出量

Array Exception Occured
A new task is executing...