用TryCatch语句有什么好处大侠“fangxinggood”说:有点多事,在UI层的事件处理中没有Try,Catch这样导致Applic
用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();