读书人

用Try Catch话语有什么好处

发布时间: 2013-07-09 09:50:48 作者: rapoo

用Try Catch语句有什么好处
大侠“fangxinggood”说:
有点多事,在UI层的事件处理中没有Try,Catch这样导致Application轻易就崩溃。
而且不能Log错误堆栈,不方便错误调查。应该加上。

在下不经常使用“Try Catch”语句,不熟悉它的功能。只知道他是抛出异常然后捕获异常,进行处理。

问题1:Try Catch语句怎样使用?
问题2:Try Catch语句有什么功能?
问题3:何为“UI”层,就是用户操作界面?
问题4:“不能Log错误堆栈”,什么是“Log错误”


[解决办法]
显然不只是UI层,任何可能出现错误而你设计时必然无法左右的地方,都可以用try,catch。
电脑上本没有异常机制,就像c++中不限制一个字节的byte等于255时依然可以执行加1操作一样。异常机制是一种额外的保护机制,当你的软件需要时,可以通过throw new Exception()抛出异常,以一种非正常结束的状态结束函数调用通知调用方,调用的地方如果没有使用try,catch捕获异常,则继续向上抛出直到最终呈献给用户一个红色的叉叉,和一堆例如:程序异常关闭,请联系xxxx等的字样。
try catch就是为了捕获异常的。
例如


try
{
//可能异常的代码,例如
object o = new object();
o = null;
MessageBox.Show(o.GetType().Name);//这里o是null会有NullRefranceException
}
catch(Exception ex)
{
//你这里捕获到异常了,可以考虑记录到文件中,以便后续查找错误,也可以其他方式处理
File.AppendAllText("errorlog.txt",ex.Message);
}

[解决办法]
try catch
就是可能会出错的代码块用这个包起来,
这样就能抛出异常,可以检查代码,一般的书籍都有介绍的,这个功能挺长的,
LZ最好可以去找本书籍看看.

[解决办法]
try catch
调试的时候很好用
有些错误无法找到的时候,在认为可能错误的地方用try catche找错误很方便
能够一目了然的知道是什么错误
[解决办法]
可以避免程序在有错的情况下运行不至于崩溃~
[解决办法]
捕获异常!!!
[解决办法]
捕获异常
易于调试
可以记录错误到日志
[解决办法]
哦?还有坏处呢啊,才知道
[解决办法]
引用:
...
电脑上本没有异常机制,
...

这句话(只这句话)不敢同意。
[解决办法]

每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
[解决办法]
是一种错误处理机制
比如
try
{
代码
}
catch(Exception e)
{

}
假如代码中有异常 加上try catch后也不会导致程序崩盘,没加的话,就会崩盘
何为“UI”层,就是用户操作界面,user interface 的简写
[解决办法]
try-catch 语句由一个 try 块后跟一个或多个 catch 子句构成,这些子句指定不同的异常处理程序。

备注
--------------------------------------------

try 块包含可能导致异常的保护代码。该块一直执行到引发异常或成功完成为止。例如,下列强制转换 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 块外部使用此变量时将产生编译器错误:使用了未赋值的局部变量。

static void Main() 
{
int x;
try
{
// Don't initialize this variable here.
x = 123;
}
catch
{
}
// Error: Use of unassigned local variable 'x'.
Console.Write(x);
}


有关 catch 块的更多信息,请参见 try-catch-finally。

示例
--------------------------------------------

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

复制// try_catch_example.cs
using System;
class MainClass
{
static void ProcessString(string s)
{
if (s == null)
{
throw new ArgumentNullException();
}
}

static void Main()
{
try
{
string s = null;
ProcessString(s);
}
catch (Exception e)
{
Console.WriteLine("{0} Exception caught.", e);
}
}
}

示例输出
System.ArgumentNullException: Value cannot be null.
at MainClass.Main() Exception caught.
此例使用了两个 catch 语句。最先出现的最特定的异常被捕获。

// try_catch_ordering_catch_clauses.cs
using System;
class MainClass
{
static void ProcessString(string s)
{
if (s == null)
{
throw new ArgumentNullException();


}
}

static void Main()
{
try
{
string s = null;
ProcessString(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);
}
}
}


示例输出
System.ArgumentNullException: Value cannot be null.
at MainClass.Main() First exception caught.注释
--------------------------------------------

在前面的示例中,如果从具体程度最低的 catch 子句开始,您将收到以下错误信息:A previous catch clause already catches all exceptions of this or a super type ('System.Exception')。

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

throw new Exception();

读书人网 >C#

热点推荐