【发布时间】:2022-01-19 03:30:51
【问题描述】:
通常编译器禁止使用未分配的局部变量,但在以下情况下不会。为什么?
private void Main()
{
// This local variable is unassigned.
string myVar;
try
{
// The Throw() method prevents the assignment from happening...
myVar = Throw();
}
finally
{
// ... so myVar is still unassigned.
}
// Here we use myVar, which is unassigned, and the compiler is not complaining.
if (myVar.Equals("Something"))
{
// ...
}
}
private string Throw()
{
throw new Exception();
}
【问题讨论】:
-
除了答案之外,您可能会注意到使用
try而不使用catch是没有意义的。从技术上讲,只有finally子句的try相当于在没有try或finally的情况下执行相同的代码。换句话说,你应该把这个问题放在“现实”的背景下。如果你添加catch,因为它“应该”是......那么编译器将抱怨可能的未分配变量。 -
@JohnG 我不同意你的断言,即没有
catch的try是没有意义的。在某些情况下,您可以将try与finally一起使用,因为在这些情况下,无论try是否成功,确保发生某些事情是您想要做的,而不是处理错误本身。 -
-
@Llama...感谢您提供示例链接。我会在一定程度上同意您的说法,并且在您链接到的示例中是的,它清楚地表明我的假设“两个”部分都将执行被证明是错误的,因为示例表明“没有”
try和 @ 987654338@ 子句,那么最终代码将永远不会被执行。感谢您为我澄清这一点。我想我的方式已经老了,永远不会在没有捕获的情况下尝试尝试。生活和学习……谢谢。