我有一个方法,使用它来汇总和输出它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);
}
}
Run Code Online (Sandbox Code Playgroud)
令我困惑的是我想要citySum总计.但是使用此配置,citySum在每个递归步骤变为零.如何保持值citySum并将其传递到下一个递归步骤?
通过简单地引入一个新变量来临时保存结果
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;
}
}
Run Code Online (Sandbox Code Playgroud)
或者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);
}
}
Run Code Online (Sandbox Code Playgroud)
或直接返回结果:
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;
}
Run Code Online (Sandbox Code Playgroud)
不要使用 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;
}
Run Code Online (Sandbox Code Playgroud)
注意这里默认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)
{
//...
Run Code Online (Sandbox Code Playgroud)