📅  最后修改于: 2023-12-03 14:59:42.442000             🧑  作者: Mango
在 C# 中,异常是在程序执行期间遇到的问题或错误,它们可能导致程序终止或运行失败。为了处理这些异常,C# 提供了一些机制,让我们能够让程序在遇到异常时执行特定的代码块,或者让异常在整个程序中传递到更高层次的代码。
在 C# 中,我们可以使用 throw
关键字来抛出异常。一个简单的例子如下所示:
if(someCondition)
{
throw new Exception("This is an exception message");
}
这段代码中,如果满足 someCondition
,throw
语句会抛出一个 Exception
异常,并将一个自定义异常消息传递给它。
我们也可以使用预定义的异常类,例如:
ArgumentException
ArgumentNullException
InvalidOperationException
NotSupportedException
FormatException
它们通常在特定的场景下被抛出,例如在方法参数无效、无法执行操作、不支持操作或格式不正确时。
为了捕获异常,我们需要使用 try
/catch
语句。当程序运行到 try
块中的代码时,它会尝试执行,如果遇到异常,则会将控制权转移给 catch
块。一个简单的例子如下所示:
try
{
// Code that might cause an exception
}
catch(Exception ex)
{
// Code to handle the exception
Console.WriteLine(ex.Message);
}
在上面的代码中,如果 try
块中的代码引发了异常,则控制权将转移到 catch
块中的代码,ex
会是抛出的异常对象。我们可以对异常进行处理或记录,使程序能够继续执行下去。
我们也可以使用多个 catch
块来捕获不同类型的异常,如下所示:
try
{
// Code that might cause an exception
}
catch(ArgumentException ex)
{
// Handle ArgumentException
}
catch(InvalidOperationException ex)
{
// Handle InvalidOperationException
}
catch(Exception ex)
{
// Handle any other exception
}
finally
{
// Code that will execute whether an exception occurs or not
}
在上面的代码中,我们捕获了可能的 ArgumentException
和 InvalidOperationException
异常,以及任何其他的异常。在这个例子中,我们也可以看到另一个关键字finally
,它允许我们执行无论是否发生异常都必须执行的代码块。
我们还可以定义自己的异常类,以便更好地描述我们的应用程序中的问题。为此,我们需要继承自 Exception
类。一个简单的例子如下所示:
class MyCustomException : Exception
{
public MyCustomException(string message) : base(message)
{
}
}
在这个例子中,我们定义了一个 MyCustomException
类,继承自 Exception
类。我们传递一个自定义的异常消息到基类的构造函数中。
我们可以使用如下代码抛出自定义异常:
if(someCondition)
{
throw new MyCustomException("This is my custom exception message");
}
在这个例子中,我们使用 throw
关键字抛出我们刚刚定义的自定义异常类。
最后,良好的异常处理是一个好的编程实践,可以帮助我们找到和修复潜在的问题并提高代码的健壮性。