C#异常处理,怎样在代码级别知道一个错误的具体类型

本人刚学C#,问题比较小白,当抛出一个异常后,比如IOException ex;读写异常,我怎么知道究竟是哪种错误类型(文件已存在?被占用?等等),ex.Message仅仅是一串不固定的字符串,所以我不好判断啊,谢谢各位

可以按照错误类型来分别捕获的
例如
try{
----代码
}
catch (ArgumentException ex)
{
// 进到这里说明发生了参数错误
}
catch(ArgumentNullException ex)
{
// 进到这里表示发生了参数为空错误
}
已知的错误类型都可以在后面一直 这样catch下去,你也可以自定义错误类型

System名称空间中常用的异常类 有以下一些

异常类名称 简单描述

MemberAccessException 访问错误:类型成员不能被访问

ArgumentException 参数错误:方法的参数无效

ArgumentNullException 参数为空:给方法传递一个不可接受的空参数

ArithmeticException 数学计算错误:由于数学运算导致的异常,覆盖面广。

ArrayTypeMismatchException 数组类型不匹配

DivideByZeroException 被零除

FormatException 参数的格式不正确

IndexOutOfRangeException 索引超出范围,小于0或比最后一个元素的索引还大

InvalidCastException 非法强制转换,在显式转换失败时引发

MulticastNotSupportedException 不支持的组播:组合两个非空委派失败时引发

NotSupportedException 调用的方法在类中没有实现

NullReferenceException 引用空引用对象时引发

OutOfMemoryException 无法为新语句分配内存时引发,内存不足

OverflowException 溢出

StackOverflowException 栈溢出

TypeInitializationException 错误的初始化类型:静态构造函数有问题时引发

NotFiniteNumberException 无限大的值:数字不合法

希望能帮到你……追问

我的意思是文件访问时IOException异常,这种异常可能包括1.文件已存在2.文件被其它程序占用,我如何具体知道到底是哪个(1和2里的哪个错误),有没有一些静态属性可以比较(就像c++里有宏可以比较),ex.Message的话它的字符串具体值难以确定

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-13

ex.GetType()不就可以知道了啊?以被0除做示例

追问

我的意思是文件访问时IOException异常,这种异常可能包括1.文件已存在2.文件被其它程序占用,我如何具体知道到底是哪个(1和2里的哪个错误),有没有一些静态属性可以比较(就像c++里有宏可以比较)

追答

gettype我已经给你说了啊!

追问

IOException ex; ex.GetType().ToString()=="System.IO.IOException",你能看出是文件被占用还是已创建吗?

追答

你前面要用Exception啊,不要用IOException

追问

Exception也一样,试过了

追答

留你联系我给你远程看一下。

C#中如何判断异常的类型
可以使用异常语句catch( Exception ex)获取异常,然后通过ex.GetType()得到异常的类型,代码如下所示:try{ int b = 0; int a = 100 \/ b;}catch( Exception ex){ MessageBox.Show( ex.GetType().ToString());}运行如下:

c#描述一下程序错误的类型,并分别作出解释?
1、IndexOutOfException类:该类用于处理下标超出了数组长度所引发的异常 2、ArrayTypeMismatchException类:该类用于处理在数组中存储数据类型不正确的元素所引发的异常 3、RankException类:该类用于处理维数错误所引发的异常 C#异常类六、与IO有关的异常 1、IOException类:该类用于处理进行文件输入输出操作...

C#进阶系列——WebApi 异常处理解决方案
具体实现中,首先创建一个类WebApiExceptionFilterAttribute.cs,继承自ExceptionFilterAttribute,并在OnException方法中,通过判断异常的具体类型,如自定义异常类型,向客户端返回不同的HTTP状态码,例如将对应的状态码写入HTTP请求的响应中。对于无法判断类型的异常,则统一返回服务端错误500。HTTP状态码在框架...

c#access数据库异常处理
1. 找不到记录 你应该把你的查询方法返回值写成false,调用时做相关的处理,比如提示用户,不存在记录等等。2.是主键的字段在你的编辑界面就应该设置为readonly,不让客户直接编辑。长度这些都是需要你在界面上的读写界面时直接写明白的,比如:你读取一个长度限定字段的TextBox里的值,你的后台应该去...

C# 代码出错不提示了
在 工具 ->选项->项目和解决方案->生成并运行->运行时,当出现生成或部署错误时->选择提示启动

C# 看下我的计算机代码哪出错了`!急`在线等!
你要在lblloop后加上.text,在最后的return要去掉,没有必要用return,因为这是个事件,你的程序要是这么该程序就通了,不过运行结果不对,我感觉你的swich那里应该是个方法,但你却写进事件里。是疏忽么??我把你的程序改了,里面的控件名我变了,呵呵。参考下,我调过去啦 protected void btnjjy...

C# .Net Core 报错时,异常信息带有路径。如何编译使其仅显示错误位置而...
显示错误堆栈信息是调试的时候协助解决程序bug的简单方法 一般生产发布的程序是不会Debug发布的,都是Release;而且在程序里面都是要catch所有的异常的,这样你的程序发布出去后才不会因为出现异常而泄露程序的关键信息,导致程序被攻击的风险 如果你觉得你的路径带有敏感信息,有一个简单的办法;换一个路径...

C#中报错,怎么看报错数据,准确找到位置
设置断点进行跟踪,添加监视,监视变量的变化,程序要进行异常捕获,处理异常 c#的异常信息会详细提示错误发生的位置 祝好运,望采纳。

c# 异常,try catch throw
catch代码块和try匹配出现,用于处理try块中出现的异常。try后可以有多个catch,根据catch(异常类型)中的异常类型执行最匹配的一个;try后可以不跟catch,但必须有跟着finally(try后有catch时也可以跟着finally)finally:无论代码正常执行还是出现异常,该代码块中的代码都肯定执行,所以可以放一些关闭数据库...

c#中异常的捕获?
嗯,同意思楼上的.如果不管什么异常都用exception的话, 那你运行的过程中查找引起这个错误的原因比较难, 更为重要的是,给用户友好的非代码级的错误提示太笼统了,让用户不明白为什么. 因为只用exception捕获的话,你不能确定到底是什么原因引起的,只能给用户说出错了,原因未知. 这很不人性....

相似回答