首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么try/finalize块不抛出CS0165:使用未分配的局部变量编译错误?

为什么try/finalize块不抛出CS0165:使用未分配的局部变量编译错误?
EN

Stack Overflow用户
提问于 2021-01-28 14:13:28
回答 1查看 49关注 0票数 1

为什么variant_1会像预期的那样在variant_2CS0165: Use of unassigned local variable一起失败时进行编译?我想象可能最终会将未分配的变量初始化为它们的默认变量,但我没有看到这种情况发生。

我用.NET Core 3.1运行了这段代码

代码语言:javascript
运行
复制
static string variant_1()
{
    string str;

    try
    {
        str = "grrr";
    }
    finally
    {

    }

    return str; //no problem ?
}

static string variant_2()
{
    string str;

    try
    {
        str = "grrr";
    }
    catch (Exception ex)
    {

    }

    return str; //does not compile: `CS0165: Use of unassigned local variable`
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-28 14:32:49

让我们想象一下,这里可能会发生一些不好的事情:

代码语言:javascript
运行
复制
static string variant_2()
{
    string str;

    try
    {
        //Something bad happens
        str = "grrr";
    }
    catch (Exception ex)
    {

    }

    return str; //does not compile: `CS0165: Use of unassigned local variable`
}

也许是ThreadAbortException。也许是别的什么事。会发生什么?控制流进入catch,然后执行函数的其余部分。str从未被分配过。

但是,对于finally情况,如果出现任何异常,则控制流可能进入finally,但随后退出该方法。永远不会遇到return。通过try/finally块继续到return的唯一路径是在try部件中不发生异常的路径,因此在其中发生的分配必须已经完成。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65938847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档