gpt4 book ai didi

c# - 为什么删除 "throw"语句会导致 "use of unassigned local variable"编译错误?

转载 作者:行者123 更新时间:2023-11-30 18:54:38 25 4
gpt4 key购买 nike

在做一个项目时,我发现了一些我和我的同事都无法解释的行为。使用的代码简化如下:

public Foo DoSomethingWithFoo()
{
Foo foo;
try
{
foo = GetFoo();
}
catch (Exception e)
{
DbHandler.LogException(e);
throw;
}
return foo;
}

这编译得很好,但是只要我们删除 throw; 语句。我们得到一个编译错误:Use of unassigned local variable 'foo'问题不是解决它,因为我们可以写 Foo foo = null;

我们知道在 C# 中局部变量没有默认值,这与赋值 null 不同。只是我们似乎无法弄清楚为什么删除 throw 语句会导致这种行为。虽然我确实找到了一些关于 undefined variable 的更多信息,但我还没有找到任何(还)可以解释这一点的内容。

那么这背后的解释是什么?

最佳答案

编译器看到有可能你的代码到了该行

return foo;

没有进行实际的分配。这是它如何发生的:

  • 您进入 try block 并调用 GetFoo()
  • GetFoo() 抛出异常
  • 您捕获异常并调用 DbHandler.LogException(e);
  • 一旦 DbHandler.LogException(e); 返回,您的方法将到达 return foo

在存在 throw 行的情况下,当输入 catch block 时,return foo 变得不可访问,解决了这个问题。

关于c# - 为什么删除 "throw"语句会导致 "use of unassigned local variable"编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32885684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com