Knowledge Base: Chinese (Simplified)  

如何使用 Visual C# .NET 和 Visual C# 2005 中的结构化异常处理文章ID: 816157

最近更新: 2006-10-4

--------------------------------------------------------------------------------
这篇文章中的信息适用于: Microsoft Visual C# .NET 2003 标准版
Microsoft Visual C# .NET 2002 标准版
Microsoft Visual C# 2005 -------------------------------------------------------------------------------- 有关本文的 Microsoft Visual Basic .NET 版本,请参见 315965。
本任务的内容
概要
要求
结构化异常处理
捕捉异常
捕捉多个异常
引发异常
完整代码列表
捕捉异常
捕捉多个异常
引发异常
参考
概要
本文介绍如何使用 Microsoft Visual C# .NET 或 Microsoft Visual C# 2005 中的结构化异常处理。 返回页首
要求
下面列出了推荐使用的硬件、软件、网络基础设施以及所需的 Service Pack:
Visual C# .NET 或 Visual C# 2005 本文假定您熟悉下列主题:
Visual C# .NET 或 Visual C# 2005
Microsoft Visual Studio .NET 或 Microsoft Visual Studio 2005
返回页首
结构化异常处理
Visual C# .NET 提供了结构化异常处理,此处理机制提供了强大而且更容易阅读的处理错误的方法。结构化异常处理让您能够将错误处理程序嵌套在同一过程中的其他错误处理程序中。结构化异常处理使用了一种类似于 If...Else...End If 语句的模块语法。这使得 Visual C# .NET 或 Visual C# 2005 代码更容易阅读和维护。您可以使用异常处理语句的组合来处理 Visual C# .NET 或 Visual C# 2005 中的异常:
try
catch
finally
throw
结构化错误处理的基本语法如下:
try
{
// Code that is expected to raise an exception.
}
catch(Exception e)
{
// Code that can handle an error.
}
finally
{
// Code to do any final cleanup.
} 您可以在 try 模块中包括任何有效的 Visual C# 代码,也可以包括另一个 try 模块或 try 模块层次结构。当任何一点出现异常时,公共语言运行库将找到容纳此代码的最近一层的 try 模块而不用运行任何附加代码行。此控制然后传递到匹配的 catch 模块(如果有),并传递到关联的 finally 模块。您还可以指定多个 catch 语句,以便每个 catch 模块都处理一个特定的错误。 返回页首
捕捉异常
单击“开始”,指向“程序”,指向“Microsoft Visual Studio .NET”或“Microsoft Visual Studio 2005”,然后单击“Microsoft Visual Studio .NET”或 Microsoft Visual Studio 2005。
在“文件”菜单上,指向“新建”,然后单击“项目”。
在“新建项目”对话框中,按照下列步骤操作:
在“项目类型”下面,单击“Visual C# 项目”。 注意:在 Visual Studio 2005 中,单击“项目类型”下的“Visual C#”。
在“模板”下,单击“控制台应用程序”。
在“名称”框中键入 MyConsoleApp。
在“位置”框中,键入 C:\,然后单击“确定”。
将以下代码添加到 Main() 函数中:
int a = 0;
int b = 10;
int c = 0; try
{
a = b / c;
}
catch (Exception e)
{
Console.WriteLine("A run-time error occurred.");
}
finally
{
Console.ReadLine();
}
要运行应用程序,请单击“调试”菜单上的“开始”。此代码将尝试让一个数除以 0。此操作是无效的,并将导致用零作被除数的错误。不过,catch 模块可以捕捉到此错误,并且“控制台”窗口将显示下面的错误消息: A run-time error occurred
关闭“控制台”窗口。
返回页首
捕捉多个异常
本部分介绍如何使用多个 catch 语句处理不同的错误。
打开您在本文“捕捉异常”部分中创建的“控制台应用程序”项目。
将 Main() 函数中现有的代码替换为下面的代码:
int a = 2147483647;
int b = 0;
int c = 0; try
{
a = checked(a + 1);
}
catch (DivideByZeroException e)
{
Console.WriteLine("Error: Divide by Zero", e.Message);
}
catch (OverflowException e)
{
Console.WriteLine("Error: Overflow", e.Message);
}
finally
{
Console.ReadLine();
}
此代码包括两个 catch 模块:
一个 catch 模块捕捉前面的用零作被除数错误。
一个 catch 模块捕捉新的溢出错误。
要运行应用程序,请单击“调试”菜单上的“开始”。“控制台”窗口显示以下错误消息:
Error:Overflow
关闭“控制台”窗口。
因为您不是总能够预料到会出现的每一种错误,所以您可以为无法预料所有异常添加一个 catch 模块。例如,在 finally 语句前添加下面的代码以捕捉任何无法预料的错误,并显示适当的错误消息:
catch (Exception e)
{
Console.WriteLine("Error: ", e.Message);
}
在“文件”菜单上,单击“关闭解决方案”。
返回页首
引发异常
结构化异常处理程序使用 catch 语句来捕捉异常。使用结构化异常处理,还可能会引发一种异常。例如,您可能会发现在 Property Set 过程中执行数据验证时引发一个异常会很有用,因为您可能需要在违反了某一业务规则时引发一条错误消息。
单击“开始”,指向“程序”,指向“Microsoft Visual Studio .NET”或“Microsoft Visual Studio 2005”,然后单击“Microsoft Visual Studio .NET”或“Microsoft Visual Stuio 2005”。
在“文件”菜单上,指向“新建”,然后单击“项目”。
在“新建项目”对话框中,按照下列步骤操作:
在“项目类型”下面,单击“Visual C# 项目”。 注意:在 Visual Studio 2005 中,单击“项目类型”下的“Visual C#”。
在“模板”下,单击“控制台应用程序”。
在“名称”框中键入 MyNewConsoleApp。
在“位置”框中,键入 C:\,然后单击“确定”。
在“项目”菜单上,单击“添加类”。
在“添加新项”对话框的“名称”框中,键入 clsPerson.cs,然后单击“打开”。 注意:在 Visual Studio 2005 中,单击“添加”。
在 clsPerson 类中添加以下代码:
public clsPerson()
{
}
private int mintAge;
public int Value; public int Age
{
get
{
Age = mintAge;
return Age;
} set
{
if(Value > 0)
mintAge = Value;
else
throw new ArgumentException("Age cannot be negative.");
}
}
此代码创建一个 Age 属性。由于一个人的年龄不能为负数,如果类的用户尝试将 Age 属性设置为一个小于 0 的数,将出现一个错误。
在 Class1.cs 的 Main() 函数中,添加下面的代码:
clsPerson p = new clsPerson(); try
{
p.Age = -1;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
Console.ReadLine();
}
要运行应用程序,请单击“调试”菜单上的“开始”。“控制台”窗口显示以下错误消息:
Age cannot be negative
关闭“控制台”窗口。
返回页首
完整代码列表
捕捉异常
using System; namespace MyConsoleApp
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
int a = 0;
int b = 0;
int c = 0; try
{
a = b / c;
}
catch (Exception e)
{
Console.WriteLine("A run-time error occurred.");
}
finally
{
Console.ReadLine();
}
}
}
}
捕捉多个异常
using System; namespace MyConsoleApp
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
int a = 2147483647; try
{
a = checked(a + 1);
}
catch (DivideByZeroException e)
{
Console.WriteLine("Error: Divide by Zero", e.Message);
}
catch (OverflowException e)
{
Console.WriteLine("Error: Overflow", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Error: ", e.Message);
}
finally
{
Console.ReadLine();
}
}
}
} 引发异常
using System; namespace MyNewConsoleApp
{ class Class1
{ [STAThread]
static void Main(string[] args)
{
clsPerson p = new clsPerson(); try
{
p.Age = -1;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
Console.ReadLine();
}
}
}
public class clsPerson
{
public clsPerson()
{
}
private int mintAge;
public int Value; public int Age
{
get
{
Age = mintAge;
return Age;
} set
{
if(Value > 0)
mintAge = Value;
else
throw new ArgumentException("Age cannot be negative.");
}
}
}
}
返回页首
参考
有关更多信息,请访问下面的 Microsoft 网站:
Exception Management Application Block for .NET
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/emab-rm.asp How Do I Catch an Exception?
http://samples.gotdotnet.com/quickstart/howto/doc/catch.aspx How Do I Throw an Exception?
http://samples.gotdotnet.com/quickstart/howto/doc/throw.aspx 返回页首
Keywords: kbhowtomaster kbprogramming kbexcepthandling KB816157 -------------------------------------------------------------------------------- Send feedback to Microsoft © Microsoft Corporation. 保留所有权利。

C#如何使用结构化异常处理的更多相关文章

  1. 第23章 SEH结构化异常处理(2)_编译器对系统SEH机制的封装

    23.2 编译器层面对系统SEH机制的封装 23.2.1 扩展的EXCEPTION_REGISTRATION级相关结构:VC_EXCEPTION_REGISTRATION (1)VC_EXCEPTIO ...

  2. 第23章 SEH结构化异常处理(1)_系统SEH机制

    23.1 基础知识 23.1.1 Windows下的软件异常 (1)中断和异常 ①中断是由外部硬件设备或异步事件产生的 ②异常是由内部事件产生的,可分为故障.陷阱和终止三类. (2)两种异常处理机制: ...

  3. 深入研究 Win32 结构化异常处理(好多相关文章)

    摘要 就像人们常说的那样,Win32 结构化异常处理(SEH)是一个操作系统提供的服务.你能找到的所有关于 SEH 的文档讲的都是针对某个特定编译器的.建立在操作系统层之上的封装库.我将从 SEH 的 ...

  4. 深入研究 Win32 结构化异常处理(作者博客有许多SEH的研究文章)

    摘要 就像人们常说的那样,Win32 结构化异常处理(SEH)是一个操作系统提供的服务.你能找到的所有关于 SEH 的文档讲的都是针对某个特定编译器的.建立在操作系统层之上的封装库.我将从 SEH 的 ...

  5. 异常处理第三讲,SEH(结构化异常处理),异常展开问题

    异常处理第三讲,SEH(结构化异常处理),异常展开问题 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 不知道昨天有木有 ...

  6. [C++]深入解析结构化异常处理(SEH)

    http://www.cppblog.com/weiym/archive/2015/02/27/209884.html 尽管以前写过一篇SEH相关的文章<关于SEH的简单总结>, 但那真的 ...

  7. Windows结构化异常处理浅析

    近期一直被一个问题所困扰,就是写出来的程序老是出现无故崩溃,有的地方自己知道可能有问题,但是有的地方又根本没办法知道有什么问题.更苦逼的事情是,我们的程序是需要7x24服务客户,虽然不需要实时精准零差 ...

  8. SEH:结构化异常处理 学习

    SEH:结构化异常处理 结构化异常处理机制提供了一个操作系统,用于优化结构的方案,为客户提供更强大的程序执行环境.试想一下,你写程序不用考虑内存访问错误,那里是空指针错误,一直在按照程序的逻辑结构来写 ...

  9. Windows内存管理(3)--检查内存可用性,结构化异常处理 和 ASSERT

    1.      检查内存可用性 在驱动程序开发中,对内存的操作要格外小心.如果某段内存是只读的,而驱动程序试图去写操作,会导致系统的崩溃. DDK提供了两个函数,帮助程序员在不知道某段内存是否可读写的 ...

随机推荐

  1. 常用Sql 标量值函数

    1.汉字拼音首字母 /****** Object: UserDefinedFunction [dbo].[fnGetHzPY] Script Date: 08/16/2018 09:04:47 Des ...

  2. Ionic学习笔记1_基本布局

    <body> <!-- 头部 -->                               bar里嵌入子元素:title,button,button-bar和 inpu ...

  3. QT错误笔记-Qt Creator needs a compiler set up to build. Configure a compiler in the kit options.

    上午在linux环境下,使用QT编译一段C++代码,出现下列错误: 最近在stackoverflow上找到了答案: i was also having the same problem so what ...

  4. nginx正则说明

    nginx正则说明 分类: nginx -- : 11758人阅读 评论() 收藏 举报 nginx正则表达式firefox ^~ 标识符后面跟一个字符串.Nginx将在这个字符串匹配后停止进行正则表 ...

  5. linux undefined reference to symbol 'floor@@GLIBC_2.2.5'

    这个是因为GNU make版本不一致导致,最后加上-lm g++或者gcc -o  main main.c -lm 如果还存在问题 需要加上-Wl,--no-as-needed g++或者gcc -W ...

  6. NSCondition(转)

    NSConditionLock 继承类NSObject 遵从的协议NSLocking NSObject NSConditionLock 类定义特定的.用户定义的条件锁 协议NSLocking 方法 l ...

  7. centos配置IP地址

    1. vi /etc/sysconfig/network-scripts/ifcfg-eth0 2. DEVICE=eth1HWADDR=00:0C:29:D2:9A:F5TYPE=EthernetU ...

  8. redis主从备份

    redis主从备份,默认是读写分离的,master用于写,slave用于读.slave的写只能用于存储一些短暂状态的变量,应为在下次同步时,会被移除. 配置主从备份原则:配从不配主,既只需修改从库配置 ...

  9. Yii简单使用阿里云短信教程!

    首先我们下载官方完整包的SDK官方标明了啊,PHP版本一定要不低于5.5下载后目录如下: 我们只需要将目录里的api_sdk复制出来到Yii项目的根目录的common模块下面的extensions文件 ...

  10. jQuery 尺寸 方法

    jQuery 提供多个处理尺寸的重要方法: width() height() innerWidth() innerHeight() outerWidth() outerHeight()