带有返回的多个输出参数

时间:2013-11-06 06:05:45

标签: c# return out

我有这样的方法声明:

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;
}

但是我得到了这个编译错误

  

必须在控制离开当前方法

之前指定out参数'z'

3 个答案:

答案 0 :(得分:4)

如果someList为空,则永远不会进入foreach循环,因此永远不会分配z。要解决此问题,请确保为z提供值,而不管someList的内容如何:

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>或创建自定义数据类型来表示该值。

答案 1 :(得分:1)

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

  

如果是块编译器,则为参数z分配值   无法确定是否可以初始化或因此初始化   你的参数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;
}

答案 2 :(得分:0)

如果someList为空,则永远不会为z分配值,这违反了out变量。删除out约束,或重新配置函数逻辑。