请问有没有什么异常catch(Exception ex)无法捕获 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //根据文档记录,C#为我们提供了一种特殊的catch块来捕获与CLS不兼容的异常//由于不能捕获这样的catch块中的对象,所以我们不能得到所捕获异常的任何信息catch{}详细内容可参考 .NET框架程序设计 try { //Some code}catch (System.Exception ex) { System.Console.Write("Error!");}显然,这条语句捕获的是System.Exception,以及所有继承自它的类。也就是说,如果你抛出了一个不是继承自System.Exception的对象,该语句就无法捕获。抛出不是异常的异,这种不兼容CLS的事情,可能吗?在1.x当中是可能的。-------------------------------------------------------------------在C++当中,我们可以用 throw "Error!" 这样的语句抛出一个字符串; 在IL当中,我们可以用下面的方式,抛出任意形式的异常:.assembly ThrowerLib { }.class public Thrower { .method static public void Start( ) { ldstr "Oops" throw ret }}-----------------------------------------------------------------在.Net2.0当中,为了确保跨语言的兼容性,CLR会自动将不是继承自System.Exception的异常包裹在RuntimeWrappedException对象中;为了保证和1.x版本的兼容性,.Net 2.0提供了RuntimeCompatibilityAttribute类,指定CLR不要对异常进行包装:[assembly:System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows = false)]测试用代码(运行于.Net 2.0): .assembly ThrowerLib { }.class public Thrower { .method static public void ThrowException( ) { ldstr "ThrowException exception from the IL world!" newobj instance void [mscorlib]System.Exception::.ctor(string) throw ret } .method static public void ThrowString( ) { ldstr "Weird exception!" throw ret }}测试用C#代码,要添加对上面的DLL的引用: [assembly: System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows = false)]namespace ThrowerExample{ class ThrowerHarness { static void Main(string[] args) { try { Thrower.ThrowException(); } catch (System.Exception ex) { System.Console.WriteLine("System.Exception error: " + ex.Message); } catch { System.Console.WriteLine("Non System.Exception based error."); } try { Thrower.ThrowString(); } catch (System.Exception ex) { System.Console.WriteLine("System.Exception error: " + ex.Message); } catch { System.Console.WriteLine("Non System.Exception based error."); } } }}-------------------------------执行结果是,第一个异常将被catch(System.Exception ex){}捕获;第二个异常由于catch(System.Exception ex){}无法捕获,将落到catch{}中。如果把第一行的属性去掉,编译时将出现下面的警告:warning CS1058: A previous catch clause already catches all exceptions. All non-exceptions thrown will be wrapped in a System.Runtime.CompilerServices.RuntimeWrappedException继续执行的话,两个异常都将被catch(System.Exception ex){}捕获,不会有任何异常落到catch{}当中 WebBrowser登录淘宝后怎样直接用HttpWebRequest抓取数据? 问个关于vs2010开发在浏览器上显示路径的问题 有谁试过整页内容导入EXCEL吗??? Sliverlight程序视图设计器 发生了未经处理的异常 [诚心求教]多窗体间数据调用。 System.IO 文件正由另一进程使用,因此该进程无法访问该文件 如何用c#程序实现远程抓取屏幕 银行排队叫号系统 一个与类相关的问题! 怎样取到一个aspx页面的所有的类型为button的id 急:C#打包后生成安装程序问题 一个简单控件问题,高分求救
//由于不能捕获这样的catch块中的对象,所以我们不能得到所捕获异常的任何信息
catch
{}详细内容可参考 .NET框架程序设计
try {
//Some code
}
catch (System.Exception ex) {
System.Console.Write("Error!");
}
显然,这条语句捕获的是System.Exception,以及所有继承自它的类。
也就是说,如果你抛出了一个不是继承自System.Exception的对象,该语句就无法捕获。抛出不是异常的异,这种不兼容CLS的事情,可能吗?在1.x当中是可能的。
-------------------------------------------------------------------
在C++当中,我们可以用 throw "Error!" 这样的语句抛出一个字符串;
在IL当中,我们可以用下面的方式,抛出任意形式的异常:
.assembly ThrowerLib { }.class public Thrower {
.method static public void Start( ) {
ldstr "Oops"
throw
ret
}
}
-----------------------------------------------------------------
在.Net2.0当中,为了确保跨语言的兼容性,CLR会自动将不是继承自System.Exception的异常包裹在RuntimeWrappedException对象中;为了保证和1.x版本的兼容性,.Net 2.0提供了RuntimeCompatibilityAttribute类,指定CLR不要对异常进行包装:[assembly:System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows = false)]测试用代码(运行于.Net 2.0):
.assembly ThrowerLib { }.class public Thrower {
.method static public void ThrowException( ) {
ldstr "ThrowException exception from the IL world!"
newobj instance void [mscorlib]System.Exception::.ctor(string)
throw
ret
} .method static public void ThrowString( ) {
ldstr "Weird exception!"
throw
ret
}
}测试用C#代码,要添加对上面的DLL的引用:
[assembly: System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows = false)]namespace ThrowerExample
{
class ThrowerHarness
{
static void Main(string[] args)
{
try
{
Thrower.ThrowException();
}
catch (System.Exception ex)
{
System.Console.WriteLine("System.Exception error: " + ex.Message);
}
catch
{
System.Console.WriteLine("Non System.Exception based error.");
} try
{
Thrower.ThrowString();
}
catch (System.Exception ex)
{
System.Console.WriteLine("System.Exception error: " + ex.Message);
}
catch
{
System.Console.WriteLine("Non System.Exception based error.");
}
}
}
}-------------------------------
执行结果是,第一个异常将被catch(System.Exception ex){}捕获;第二个异常由于catch(System.Exception ex){}无法捕获,将落到catch{}中。如果把第一行的属性去掉,编译时将出现下面的警告:
warning CS1058: A previous catch clause already catches all exceptions. All non-exceptions thrown will be wrapped in a System.Runtime.CompilerServices.RuntimeWrappedException继续执行的话,两个异常都将被catch(System.Exception ex){}捕获,不会有任何异常落到catch{}当中