有没有办法省略参数?

时间:2011-01-19 20:11:43

标签: c# parameter-passing out-parameters

假设我有一个带out参数的函数,但是我不需要它的值。如果给定的结果无论如何都会丢弃,有没有办法传递实际参数?

修改

虽然这个问题被投票为Optional Output Parameters 它只是从方法创建者的角度来看。如果您是该方法的用户,那么您不想让参数成为可选参数,只是在不声明变量的情况下不使用它。虽然这是不可能的,但使用C# 7.0可以在方法调用中声明它。所以而不是:

int unusedValue;
TryGetValue("key", out unusedValue);

你得到:

TryGetValue("key", out int unusedValue);

甚至:

TryGetValue("key", out _);

这应该作为答案添加,但是:

  • 我不能为这个问题做这件事,因为它被标记为傻瓜;
  • 这个问题看起来似乎是一个实际上要求不同的东西。

3 个答案:

答案 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),一切正常。我不确定变量的存储位置,可能就像在传入的任何其他参数中一样存在于堆栈中,并且当函数退出时它会消失。