栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

尝试实际发生的情况{return x; }最后{x = null; }语句?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

尝试实际发生的情况{return x; }最后{x = null; }语句?

不-在IL级别,您不能从异常处理块内部返回。它本质上将其存储在变量中,然后返回

即类似于:

int tmp;try {  tmp = ...} finally {  ...}return tmp;

例如(使用反射器):

static int Test() {    try {        return SomeNumber();    } finally {        Foo();    }}

编译为:

.method private hidebysig static int32 Test() cil managed{    .maxstack 1    .locals init (        [0] int32 CS$1$0000)    L_0000: call int32 Program::SomeNumber()    L_0005: stloc.0     L_0006: leave.s L_000e    L_0008: call void Program::Foo()    L_000d: endfinally     L_000e: ldloc.0     L_000f: ret     .try L_0000 to L_0008 finally handler L_0008 to L_000e}

这基本上声明了一个局部变量(

CS$1$0000
),将值放入变量中(在已处理的块内),然后在退出该块后加载该变量,然后将其返回。Reflector将此呈现为:

private static int Test(){    int CS$1$0000;    try    {        CS$1$0000 = SomeNumber();    }    finally    {        Foo();    }    return CS$1$0000;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452029.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号