带 out 参数的变量范围
Scope of variable with out parameter
示例:
我有以下代码块:
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 参数,但我不确定。有人可以解释一下吗?
是的,正如您怀疑的那样,区别在于 "out" 修饰符。
这是 C# 7 中添加的一项功能,允许您在要将变量用作参数的位置声明变量。
这可能很方便,否则您必须在方法调用之前声明 parsedNumber
。
您可以在 "Out variables" 下阅读更多相关信息。
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
C# 7.0 之前
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);
参考:
示例:
我有以下代码块:
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 参数,但我不确定。有人可以解释一下吗?
是的,正如您怀疑的那样,区别在于 "out" 修饰符。
这是 C# 7 中添加的一项功能,允许您在要将变量用作参数的位置声明变量。
这可能很方便,否则您必须在方法调用之前声明 parsedNumber
。
您可以在 "Out variables" 下阅读更多相关信息。
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
C# 7.0 之前
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);
参考: