我有这样的方法声明:
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'
答案 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
约束,或重新配置函数逻辑。