【问题标题】:multiple out parameters with a return带返回的多个输出参数
【发布时间】:2013-11-06 06:05:45
【问题描述】:

我有一个这样的方法声明:

public int myMethod(int x, out int y, out int z)
{
    int k;
    foreach(int i in someList)
    {
        if(anotherMethod(out k))
        {
            z = k;
        }
        else
        {
            z = 0;
        }
    }

    y = someValue;

    return anotherValue;
}

但是我得到这个编译错误

必须在控制离开当前方法之前分配输出参数'z'

【问题讨论】:

  • 如果someList 为空,z 永远不会得到值。
  • 先把z初始化...

标签: c# return out


【解决方案1】:

如果someList 为空,则永远不会进入foreach 循环,因此永远不会分配z。要解决此问题,请确保无论someList 的内容如何,​​都为z 赋予一个值:

public int myMethod(int x, out int y, out int z)
{
    z = 0; // or whatever default value you like

    ...
}

但是,您可能应该考虑重构此代码。可能有更好的方法来实现这一点。如果您真的想返回 3 个不同的 int 值,您可以考虑使用 Tuple<int, int, int> 或创建自定义数据类型来表示该值。

【讨论】:

  • 是的,这就是问题所在。谢谢
【解决方案2】:

原因:out 参数必须在从函数返回之前初始化。

您正在为 if 块中的参数 z 赋值,因此编译器 无法确定它是否可以初始化,因此初始化 你在 if 块之前的参数 z 如下:

public int myMethod(int x, out int y, out int z)
{
    int k;
    z=0;
    foreach(int i in someList)
    {

        if(anotherMethod(out k))
        {
            z = k;
        }
        else
        {
            z = 0;
        }
    }

    y = someValue;

    return anotherValue;
}

【讨论】:

    【解决方案3】:

    如果someList 为空,则永远不会为z 赋值,这违反了它是out 变量。移除out 约束,或者重新配置你的函数逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 2021-12-18
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-09
      相关资源
      最近更新 更多