假设我有一个带out
参数的函数,但是我不需要它的值。如果给定的结果无论如何都会丢弃,有没有办法传递实际参数?
修改
虽然这个问题被投票为Optional Output Parameters 它只是从方法创建者的角度来看。如果您是该方法的用户,那么您不想让参数成为可选参数,只是在不声明变量的情况下不使用它。虽然这是不可能的,但使用C# 7.0可以在方法调用中声明它。所以而不是:
int unusedValue;
TryGetValue("key", out unusedValue);
你得到:
TryGetValue("key", out int unusedValue);
甚至:
TryGetValue("key", out _);
这应该作为答案添加,但是:
答案 0 :(得分:23)
你不能这样做,但没有规则说你必须使用返回的值。您只需传递一个永远不会再使用的临时变量。
C#4.0允许使用可选参数,但out
参数不能是可选参数。
编辑: BTW,你也可以重载方法:
int DoStuff()
{
int temp;
return DoStuff(out temp);
}
int DoStuff(out outParam)
{
//...
}
答案 1 :(得分:7)
虽然你实际上无法使out参数成为可选项,但你可以简单地为函数创建一个不带out参数的重载,这样就不需要创建一个临时变量。
public void DoSomething(int param1, out int param2)
{
/* Method work here */
}
public void DoSomething(int param1)
{
int temp;
DoSomething(param1, out temp);
}
答案 2 :(得分:0)
不确定C#,但在VB.Net中,您只需将常量传递给输出(byref)参数即可。因此,如果您有一个整数,作为输出参数,您不必传入实际变量,您可以传入0或任何其他有效整数。对于Objects,包括字符串,你只能传入Nothing(C#中为Null),一切正常。我不确定变量的存储位置,可能就像在传入的任何其他参数中一样存在于堆栈中,并且当函数退出时它会消失。