不含参数的变量范围

Sea*_*ayn 5 c# scope local-variables

例:

我有以下代码块:

if (!int.TryParse("123", out var parsedNumber))
{
    return;
}

Console.WriteLine(parsedNumber);
Run Code Online (Sandbox Code Playgroud)

控制台中的输出为:123

题:

生产线Console.WriteLine(parsedNumber);知道的可能性如何parsedNumber

根据我的理解,parsedNumber应该仅在中提供if-block,不是吗?

如果我尝试这样做:

foreach (var data in dataList)
{
   data += "something";
}

Console.WriteLine(data);
Run Code Online (Sandbox Code Playgroud)

Console.WriteLine(data);找不到data


我认为解决方案是out参数,但是我不确定。有人可以解释吗?

eug*_*ioy 5

是的,因为您怀疑不同之处在于“出”修饰符。

它是C#7中添加的一项功能,它使您可以在要用作变量的位置声明变量。

这可能很方便,因为否则您必须parsedNumber在方法调用之前声明。

您可以在此处的“输出变量”下阅读更多信息。

https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/

编辑

至于为什么变量仍然在if范围之外,这肯定会造成混淆,但这是实现此目的时的一种设计选择,特别是针对“ if”情况,并且恰好可以在“ try”方法中使用它。 。

您可以参考此评论(实际上,您可以看一下整个讨论,以了解如何实现此观点的不同观点)。

https://github.com/dotnet/roslyn/issues/12939#issuecomment-255650834