【问题标题】:Is there a way to omit out parameter? [duplicate]有没有办法省略参数? [复制]
【发布时间】:2011-06-12 00:43:12
【问题描述】:

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

编辑:

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

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

你得到:

TryGetValue("key", out int unusedValue);

甚至:

TryGetValue("key", out _);

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

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

【问题讨论】:

    标签: c# parameter-passing out-parameters


    【解决方案1】:

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

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

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

    int DoStuff()
    {
        int temp;
        return DoStuff(out temp);
    }
    
    int DoStuff(out outParam)
    {
        //...
    }
    

    【讨论】:

    • 好吧,我知道我不必使用它。我也不想传递任何变量。不过这就是答案,谢谢。
    【解决方案2】:

    虽然您实际上无法将 out 参数设为可选,但您可以简单地为没有 out 参数的函数创建重载,这样就无需创建临时变量。

    public void DoSomething(int param1, out int param2)
    {
        /* Method work here */
    }
    
    public void DoSomething(int param1)
    {
        int temp;
        DoSomething(param1, out temp);
    }
    

    【讨论】:

    • 这个答案更实用。以后想用还是不用都不需要再修改了。
    • 如果你不拥有你正在调用的方法,你可以创建一个扩展方法来为你虚拟化输出参数。
    【解决方案3】:

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

    【讨论】:

    • 我试了一下,很遗憾没有成功。 error CS1510: A ref or out argument must be an assignable variable.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 2020-10-05
    相关资源
    最近更新 更多