中易网

在不会出异常的地方加try catch会出错吗

答案:1  悬赏:50  
解决时间 2021-02-22 12:41
在不会出异常的地方加try catch会出错吗
最佳答案
不会出错

try-catch请参见
C# 关键字 | 与 C++ 比较 | 异常处理语句 | throw | try-finally | 引发异常 | C. 语法
try-catch 语句由一个 try 块和其后所跟的一个或多个 catch 子句(为不同的异常指定处理程序)构成。此语句会采用下列形式之一:

try try-block
catch (exception-declaration-1) catch-block-1
catch (exception-declaration-2) catch-block-2
...
try try-block catch catch-block
其中:

try-block
包含应引发异常的代码段。
exception-declaration, exception-declaration-1, exception-declaration-2
异常对象声明。
catch-block, catch-block-1, catch-block-2
包含异常处理程序。
备注
try-block 包含可能导致异常的保护代码块。该块一直执行到引发异常或成功完成为止。例如,下列转换 null 对象的尝试引发 NullReferenceException 异常:

object o2 = null;
try
{
int i2 = (int) o2; // Error
}
catch 子句使用时可以不带任何参数,在这种情况下它捕获任何类型的异常,并被称为一般 catch 子句。它还可以采用从 System.Exception 派生的对象参数,在这种情况下它处理特定的异常。例如:

catch (InvalidCastException e)
{
}
在同一个 try-catch 语句中可以使用一个以上的特定 catch 子句。这种情况下 catch 子句的顺序很重要,因为会按顺序检查 catch 子句。将先捕获特定程度较高的异常,而不是特定程度较小的异常。

在 catch 块中可以使用 throw 语句再次引发已由 catch 语句捕获的异常。例如:

catch (InvalidCastException e)
{
throw (e); // Rethrowing exception e
}
如果要再次引发当前由无参数的 catch 子句处理的异常,则使用不带参数的 throw 语句。例如:

catch
{
throw;
}
请在 try 块内部只初始化其中声明的变量;否则,完成该块的执行前可能发生异常。例如,在下面的代码示例中,变量 x 在 try 块内初始化。试图在 Write(x) 语句中的 try 块外部使用此变量时将生成编译器错误:使用了未赋值的局部变量。

public static void Main()
{
int x;
try
{
x = 123; // Don 't do that.
// ...
}
catch
{
// ...
}
Console.Write(x); // Error: Use of unassigned local variable 'x '.
}
有关 catch 的更多信息,请参见 try-catch-finally。

示例
在此例中,try 块包含对可能导致异常的 MyFn() 方法的调用。catch 子句包含仅在屏幕上显示消息的异常处理程序。当从 MyFn() 内部调用 throw 语句时,系统查找 catch 语句并显示 Exception caught 消息。

// Rethrowing exceptions:
using System;
class MyClass
{
public static void Main()
{
MyClass x = new MyClass();
try
{
string s = null;
x.MyFn(s);
}

catch (Exception e)
{
Console.WriteLine( "{0} Exception caught. ", e);
}
}

public void MyFn(string s)
{
if (s == null)
throw(new ArgumentNullException());
}
}
输出
发生以下异常:

System.ArgumentNullException
示例
此例使用了两个 catch 语句。最先出现的最特定的异常被捕获。

// Ordering catch clauses
using System;
class MyClass
{
public static void Main()
{
MyClass x = new MyClass();
try
{
string s = null;
x.MyFn(s);
}

// Most specific:
catch (ArgumentNullException e)
{
Console.WriteLine( "{0} First exception caught. ", e);
}

// Least specific:
catch (Exception e)
{
Console.WriteLine( "{0} Second exception caught. ", e);
}

}

public void MyFn(string s)
{
if (s == null)
throw new ArgumentNullException();
}
}
输出
发生以下异常:

System.ArgumentNullException
在前面的示例中,如果从特定程度最小的 catch 子句开始,您将收到此错误信息:

A previous catch clause already catches all exceptions of this or a super type ( 'System.Exception ')

但是,若要捕获特定程度最小的异常,请使用下面的语句替换 throw 语句:

throw new Exception();
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
人多的小区,做什么生意好呢?
《二泉映月中》的全文中,阿炳的“积淀情怀”
刘家湾村在什么地方啊,我要过去处理事情
我是生物医学工程的报考公务员的时候,什么部
吃面喝汤会不会影响胃消化
海通出境咨询股份公司我想知道这个在什么地方
求助 古墓丽影崛起苏联设施的求生贮藏点 找不
更兰村怎么去啊,有知道地址的么
只有女生回答才采纳! 为什么有的女生很自恋
房租一般都是压一付三的吗?可以商量成压一付
父亲望着饭桌上总也盛不满的菜碗。(缩句)
无修OAV,百度云
勤俭大桥在哪里啊,我有事要去这个地方
《德意志之歌》是在什么样的历史背景下产生的
中国象棋 等级 高低排序叫什么
推荐资讯
济南市市中区人事局周六周日上班吗
常州祥胜精密机械厂地址有知道的么?有点事想
河南大专排名,现在是一个什么样的情况?
庆善大街/慎益大街(路口)我想知道这个在什么
青梅酒开后要怎样储存?
温州目前的租房中介费
黄草坝村地址有知道的么?有点事想过去
帝国时代2的the king’s best men全部攻略
渎职与受贿何时数罪并罚
大顺宾馆这个地址在什么地方,我要处理点事
时尚衣族地址在什么地方,想过去办事
象棋有什么头衔
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?