41

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

编辑:

尽管这个问题被认为是可选输出参数的欺骗, 但只有从方法创建者的角度来看。如果您是该方法的用户,那么您不希望使参数成为可选参数,而只是在不声明变量的情况下不使用它。虽然这是不可能的,但使用C# 7.0可以在方法调用中声明它。所以而不是:

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

你得到:

TryGetValue("key", out int unusedValue);

甚至:

TryGetValue("key", out _);

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

  • 对于这个问题,我不能这样做,因为它被标记为骗子;
  • 这个问题似乎是一个被骗的问题,实际上要求的是不同的东西。
4

3 回答 3

26

你不能这样做,但没有规定你必须使用返回的值。您可以简单地传递一个您不再使用的临时变量。

C# 4.0 允许可选参数,但out参数不能是可选的。

编辑:顺便说一句,您还可以重载该方法:

int DoStuff()
{
    int temp;
    return DoStuff(out temp);
}

int DoStuff(out outParam)
{
    //...
}
于 2011-01-19T20:18:22.170 回答
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);
}
于 2011-01-19T20:23:07.287 回答
0

不确定 C#,但在 VB.Net 中,您可以简单地将常量传递给输出(byref)参数。因此,如果您有一个整数,作为输出参数,您不必传入实际变量,只需传入 0 或任何其他有效整数即可。对于对象,包括字符串,您只需传入 Nothing(C# 中为 Null),一切正常。我不确定变量的存储位置,可能只是在堆栈上,就像您传入的任何其他参数一样,并且在函数退出时消失。

于 2011-01-19T21:28:01.737 回答