2017-07-08 40 views
1

实施例:Scope变量与输出参数

我有以下代码块:

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

Console.WriteLine(parsedNumber); 

在控制台的输出是:123

问题:

那怎么可能呢,那行Console.WriteLine(parsedNumber);知道parsedNumber

据我了解,parsedNumber应该只在if-block中可用,应该不是吗?

如果我试试这个:

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

Console.WriteLine(data); 

Console.WriteLine(data);找不到data


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

回答

2

是的,因为你怀疑区别在于“out”修饰符。

,它在C#7,使您可以在您想要使用它作为参数点声明变量增加了一个功能。

这可能是方便,否则你就必须在方法调用之前声明parsedNumber

你可以在这里阅读更多关于它的信息,在“输出变量”下。

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

编辑

至于为什么变量仍然在范围,如果外面,那肯定会引起混乱,但实现这个的时候,专门为它设计的选择“如果“的情况下,并确切地说,它可以用于”尝试“的方法。

您可以参考此评论(其实你可以在整个讨论看看,看的角度有关于如何实现这一不同点)。

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

+1

我觉得他/她问的是,为什么会出如果(){},我们仍然可以访问到parsedNumber – EntryLeveDeveloper

+0

@CodeContributor:是的,这也是有道理的,为我的答案添加了一个编辑来涵盖 – eugenioy

+0

谢谢你的好解释。 –

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

+0

谢谢你的例子 –