C# out关键字如何确定在传递之前未声明的变量的作用域?

C# out关键字如何确定在传递之前未声明的变量的作用域?,c#,out,C#,Out,当我调用一个带out参数的函数,并且在调用它之前没有声明用作参数的变量时,新变量的作用域是什么 我注意到我可以做到这一点: if (functionTakesOut(out int newInteger)) { Console.WriteLine(newInteger); } Console.WriteLine(newInteger); 这两个Console.WriteLine()调用都可以工作 在本例中,您使用的范围是local…因为您将其声明为 传过去 基本上与以下内容相同: int-

当我调用一个带out参数的函数,并且在调用它之前没有声明用作参数的变量时,新变量的作用域是什么

我注意到我可以做到这一点:

if (functionTakesOut(out int newInteger)) {
  Console.WriteLine(newInteger);
}
Console.WriteLine(newInteger);

这两个Console.WriteLine()调用都可以工作

在本例中,您使用的范围是
local
…因为您将其声明为 传过去

基本上与以下内容相同:

int-newInteger;
if(函数takesout(out newInteger))
{
Console.WriteLine(newInteger);
}
Console.WriteLine(newInteger);

这是C#7特性,您只需在使用它的地方声明newInteger变量,而不是声明它,例如上面的一行。functionTakeOut必须为该行返回bool进行编译…假设它是。如果| |左边的表达式是真的……它永远不会计算右边的值。另一方面,如果您只使用常规的“或”运算符(而不是短路| |运算符)……那么它将计算两边。@KlausGütter…@第8位后续问题是关于值而不是范围的。它将是假的。int的默认值为零。如果从未声明newInteger…并且使用:If(newInteger>0 | |函数takesout(out int newInteger)…则不会编译。