我有一种方法可以使用out
对它进行求和并输出。我的方法如下:
public void MyMethod(int page, string city, out int citySum)
{
citySum = 0;
for(int i = 0; i < 50; i++)
{
citySum++;
}
if(page < 15)
{
MyMethod(page + 1, city,out citySum);
}
}
让我感到困惑的是我想要citySum
总计。{但是使用此配置,citySum
在每个递归步骤变为零。如何保持citySum
的值并将其传递给下一个递归步骤?
答案 0 :(得分:9)
简单地引入一个新变量来暂时保存结果
public void MyMethod(int page, string city, out int citySum)
{
citySum = 0;
for(int i = 0; i < 50; i++)
{
citySum++;
}
if(page < 15)
{
int tempSum = 0;
MyMethod(page + 1, city, out tempSum);
citySum += tempSum;
}
}
或者使用ref
代替
public static void MyMethod(int page, string city, ref int citySum)
{
for(int i = 0; i < 50; i++)
{
citySum++;
}
if(page < 15)
{
MyMethod(page + 1, city, ref citySum);
}
}
或直接返回结果:
public static int MyMethod(int page, string city)
{
int citySum = 0;
for(int i = 0; i < 50; i++)
{
citySum++;
}
if(page < 15)
{
citySum += MyMethod(page + 1, city);
}
return citySum;
}
答案 1 :(得分:4)
不要使用out并从方法返回int。另外使用+= 50
可以使代码更清晰。
public int MyMethod(int page, string city, int citySum = 0)
{
//for (int i = 0; i < 50; i++)
//{
// citySum++;
//}
citySum += 50;
if (page < 15)
{
return MyMethod(page + 1, city, citySum);
}
return citySum;
}
请注意,citySum
默认设置为0
,但可以通过调用方法设置。要解决此问题,您可以使用public
方法通过将其更改为private
来公开此方法:
public int MyMethod(int page, string city)
{
return MyMethod(page, city, 0);
}
private int MyMethod(int page, string city, int citySum)
{
//...