我正在使用一个使用 C# 的控制台应用程序,它有一个调用另一个方法并传递一个输出参数的方法
public void method1()
{
int trycount = 0;
....
foreach (var gtin in gtins)
{
method2(gtin, out trycount);
}
if (trycount > 5)
{...}
}
public void method2 (string gtin, out int trycount)
{
//gives me a compilation error if i don't assign
//trycount=0;
......
trycount++;
}
我不想覆盖 trycount 变量 = 0,因为在第二次在方法 1 中执行 foreach 之后,trycount 有一个值。我想将变量传回,以便在 foreach 之后我可以检查参数的值。
我知道我可以做类似 return trycount = method2(gtin, trycount) 的事情,但如果可能的话我想尝试使用 out 参数。谢谢
最佳答案
听起来您想要一个 ref
参数而不是 out
参数。基本上 out
就像有一个额外的返回值 - 它最初在逻辑上有一个值(它不是明确分配的,必须在方法正常退出之前明确分配).
这也是为什么您不需要必须有一个明确分配的变量才能将其用作参数的原因:
int x;
// x isn't definitely assigned here
MethodWithOut(out x);
// Now it is
Console.WriteLine(x);
从逻辑上讲,当您调用 MethodWithOut
时,x
没有任何值,因此如果方法可以使用该值,那么什么值会你希望它得到吗?
将此与 ref
参数进行比较,后者“进出”有效 - 您用于参数的变量必须在调用之前明确赋值,参数最初是明确赋值的,所以您可以从中读取,调用者可以看到在方法中对其所做的更改。
有关 C# 参数传递的更多详细信息,请参阅 my article on the topic .
(顺便说一句,我强烈建议您养成遵循 .NET 命名约定的习惯,即使在演示代码中也是如此。它可以减少阅读它的认知负担。)
关于c# - 在控制台应用程序 c# 中使用 out 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27828789/