C# - 调用异常时如何获取类名和行号

作者:编程家 分类: 编程代码 时间:2025-09-08

使用C#编程时,我们经常会遇到异常,这是在程序执行期间发生的错误。对于调试和修复代码来说,了解异常发生的位置是非常重要的。在C#中,我们可以通过获取异常的堆栈跟踪信息来获取异常发生的类名和行号。

获取异常的类名和行号

当程序运行时发生异常,C#会自动创建一个包含异常信息的对象。我们可以通过捕获这个异常对象并访问其堆栈跟踪信息来获取异常发生的类名和行号。

C#中的异常堆栈跟踪信息包含了异常发生时的方法调用链。我们可以使用StackTrace类来获取堆栈跟踪信息。StackTrace类提供了一组用于访问和操作堆栈跟踪信息的方法和属性。

下面是一个示例代码,展示了如何获取异常的类名和行号:

csharp

try

{

// 可能会引发异常的代码

}

catch (Exception ex)

{

// 获取异常的堆栈跟踪信息

StackTrace stackTrace = new StackTrace(ex, true);

// 获取异常发生的方法调用链

StackFrame[] stackFrames = stackTrace.GetFrames();

// 获取异常发生的类名和行号

string className = stackFrames[0].GetMethod().DeclaringType.Name;

int lineNumber = stackFrames[0].GetFileLineNumber();

// 输出异常发生的类名和行号

Console.WriteLine("异常发生在类 {0} 的第 {1} 行。", className, lineNumber);

}

在上面的代码中,我们使用try-catch块来捕获可能引发异常的代码。在catch块中,我们创建了一个StackTrace对象,并将异常对象作为参数传递给它。然后,我们使用GetFrames方法获取异常发生时的堆栈跟踪信息,并通过访问StackFrame对象来获取类名和行号。

案例代码

假设我们编写了一个简单的C#程序,用于计算两个数的除法。但是,由于用户输入的数据可能包含除数为零的情况,所以我们需要在程序中添加异常处理逻辑。

下面是一个示例代码,展示了如何在C#中调用异常时获取类名和行号:

csharp

using System;

class Program

{

static void Main(string[] args)

{

try

{

Console.Write("请输入被除数:");

int dividend = Convert.ToInt32(Console.ReadLine());

Console.Write("请输入除数:");

int divisor = Convert.ToInt32(Console.ReadLine());

int result = Divide(dividend, divisor);

Console.WriteLine("计算结果:{0}", result);

}

catch (Exception ex)

{

StackTrace stackTrace = new StackTrace(ex, true);

StackFrame[] stackFrames = stackTrace.GetFrames();

string className = stackFrames[0].GetMethod().DeclaringType.Name;

int lineNumber = stackFrames[0].GetFileLineNumber();

Console.WriteLine("异常发生在类 {0} 的第 {1} 行。", className, lineNumber);

}

}

static int Divide(int dividend, int divisor)

{

return dividend / divisor;

}

}

在上面的代码中,我们在Divide方法中进行了除法运算。如果除数为零,将会引发一个DivideByZeroException异常。在catch块中,我们使用StackTrace类获取了异常的堆栈跟踪信息,并输出了异常发生的类名和行号。

在C#中,我们可以使用StackTrace类来获取异常发生的类名和行号。通过捕获异常对象并访问其堆栈跟踪信息,我们可以确定异常发生的位置,并进行调试和修复代码。

以上是关于在C#中调用异常时如何获取类名和行号的介绍和示例代码。希望本文对你有所帮助!