【问题标题】:In C#, can I send an out parameter to be used elsewhere在 C# 中,我可以发送一个输出参数以在其他地方使用吗
【发布时间】:2013-01-29 18:00:02
【问题描述】:

我有一个被另一部分代码调用的函数,其签名为:

public override bool DoSomething(Foo f, out string failed)
{
    failed = "I failed";
    _anotherClassMethodExpectingString.SetString(failed);
}

所以我的问题是 - 如果我需要向另一个类方法发送我的调用者在其“out”参数中期望的相同字符串,我可以只发送相同的变量,而不会对我的调用者产生任何影响吗? “out”参数让我有点困惑.. 我应该改用这样的东西吗:

public override bool DoSomething(Foo f, out string failed)
{
   string localStr = "I failed";
   failed = localStr;
   _anotherClassMethodExpectingString.SetString(localStr);
}

【问题讨论】:

    标签: c# out


    【解决方案1】:

    除非您调用的后续方法也使用 out 参数,否则无需定义局部变量。该字符串将不受任何常规参数传递的影响。

    【讨论】:

      【解决方案2】:

      如果您不希望或不希望您的方法的调用者看到第三种方法的任何更改,那么您所拥有的一切都很好。如果我正确阅读了您的问题,这似乎是您的意图。

      如果您希望您的调用方反映由第三种方法引入的更改,则它还需要是一个 out 参数,或者通过返回值返回修改,然后您将其分配给原始输出参数在返回之前。

      【讨论】:

        【解决方案3】:

        如果为没有refout 的方法声明参数,则该参数可以具有与其关联的值。该值可以在方法中更改,但当控制权返回调用过程时,更改后的值不会保留。

        鉴于字符串在 .NET 中是不可变的,可以安全地将 failed 传递给字符串参数上没有 refout 的任何方法,并确保它不会被更改。

        【讨论】:

          【解决方案4】:

          out 参数类似于 c++ 中对象的指针。因此,如果您不使用 'out' 定义器,则不会更改参数的值。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-23
            • 1970-01-01
            • 2022-01-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多