带参数的变量范围

时间:2017-07-08 02:16:39

标签: c# scope local-variables

示例:

我有以下代码块:

Console.WriteLine(parsedNumber);

控制台中的输出是:123

问题:

parsedNumber如何知道parsedNumber怎么可能?

根据我的理解,if-block只应在foreach (var data in dataList) { data += "something"; } Console.WriteLine(data); 中提供,不应该吗?

如果我试试这个:

Console.WriteLine(data);

data无法找到{{1}}。

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

2 个答案:

答案 0 :(得分:3)

是的,因为您怀疑差异是“out”修饰符。

这是C#7中添加的一项功能,允许您在要将变量用作参数的位置声明变量。

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

您可以在“输出变量”下阅读更多相关内容。

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

修改

至于为什么变量仍然在if之外的范围内,这肯定会让人感到困惑,但是在实现这个时它是一个设计选择,特别是对于“if”情况,并且恰好可以用于“尝试“方法。

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

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

答案 1 :(得分:2)

在C#7.0之前

out关键字用于传递方法参数的引用。在将变量作为out参数传递之前,必须声明它。

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

Console.WriteLine(parsedNumber); 

在C#7.0中

您可以直接在方法中定义方法的输出参数。新代码看起来像

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

Console.WriteLine(parsedNumber); 

参考:

Whats-new-in-csharp-7-0