对一般捕获子句发出系统的任何实际含义.对象作为类型筛选器
本文关键字:对象 筛选 类型 任何实 子句 系统 | 更新日期: 2023-09-27 17:50:26
我记得曾经听人说过,抛出System.Exception
(或扩展它的对象)以外的其他类型的对象在技术上是合法的CIL,尽管c#没有支持它的特性。所以我很感兴趣地看到下面的c#代码:
try {
throw new Exception();
} catch(Exception x) {
try {
throw;
} catch {
Console.Write("yes");
}
}
编译为以下CIL:
.try
{
IL_0000: newobj instance void [mscorlib]System.Exception::.ctor()
IL_0005: throw
} // end .try
catch [mscorlib]System.Exception
{
IL_0006: pop
.try
{
IL_0007: rethrow
} // end .try
catch [mscorlib]System.Object
{
IL_0009: pop
IL_000a: ldstr "yes"
IL_000f: call void [mscorlib]System.Console::Write(string)
IL_0014: leave.s IL_0016
} // end handler
IL_0016: leave.s IL_0018
} // end handler
,我们看到嵌套的通用catch子句编译为:
catch [mscorlib]System.Object
c#中的,对于使用System.Object
而不是System.Exception
作为类型过滤器的通用catch子句,是否有实际意义?
与。net -2.0不同。我在。net 1.1的时候读到过。
这里有解释(我就不抄了)。请注意,第一个答案是错误的,第二个答案是正确的。
关于它是否实用:否。