try {
}
catch (Exception) {
}
Run Code Online (Sandbox Code Playgroud)
我能写吗?
try {
}
catch {
}
Run Code Online (Sandbox Code Playgroud)
这在C#.NET 3.5中是否正常.代码看起来更好,但我不知道是否相同.
Rei*_*aka 30
他们不一样.
catch(Exception){}仅捕获托管异常; catch {}也会捕获非CLS异常:http://msdn.microsoft.com/en-gb/bb264489.aspx
当在catch块中删除先前允许的权限时,未处理的非CLS兼容异常会成为安全问题.由于未捕获到非CLS兼容的异常,因此抛出非CLS兼容异常的恶意方法可能会以提升的权限运行.
编辑:结果.NET 2.0+包装值 - 所以它们是相同的.这有点令人宽慰!
Jus*_*ier 13
是的,第一种形式的优点是您可以命名异常变量,然后使用该对象将异常详细信息记录到文件等...
try {
}
catch (Exception ex) {
// Log exception message here...
}
Run Code Online (Sandbox Code Playgroud)
此外,Exception如果您可以使用第一个表单捕获特定异常(例如IOException),那么捕获泛型类通常是一种不好的做法.
Tra*_*man 12
编辑:从C#2.0开始,可以通过两种方式捕获非CLS兼容的异常.
所以,是的.它们完全相同. 没有Type声明的无参数catch子句捕获所有异常.
在CLR 2.0中,MS引入了RuntimeWrappedException,它是一种符合CLS的异常类型,用于封装非CLS兼容的异常.C#编译器仍然不允许你抛出它们,但它可以使用catch(Exception){}语法捕获它们.
这就是为什么如果在CLR 2.0或更高版本上同时使用这两个子句,C#编译器将发出警告CS1058.
因此,它们实际上是相同的.