重构代码以避免goto语句

时间:2016-02-16 04:32:22

标签: c# c#-4.0

在C#代码中避免goto语句的最佳方法是什么? 我想摆脱goto语句重新启动for循环

的执行
//some processing statements
//..
//..

start:
var rowCollection = GetData();
int RowCount = rowCollection.Count;
for(int iRow = 0; iRow < RowCount; iRow++)
{

  if(rowCollection[iRow]["Col"] > 0)
  {
     goto start;
  }

  else
  {
     //some processing statement
  }
}

//some more processing statements
//..
//..

其中,

  1. RowCount =从GetData()方法
  2. 收到的行数
  3. rowCollection [iRow] [&#34; Col&#34;],&#34; Col&#34;是一些列名

3 个答案:

答案 0 :(得分:5)

我认为您必须重构代码以使其更清晰,例如:

bool result;
do
{
    var rowCollection = GetData();
    result = ProcessData(rowCollection);
} while (!result);

然后有这个方法:

bool ProcessData(RowCollection rowCollection)
{
    foreach (var item in rowCollection)
    {
        if (item["Col"] > 0)
        {
            return false;
        }
        else
        {
            // Do your stuff.
        }
    }

    return true;
}

这样您的代码就更具可读性和可维护性。

答案 1 :(得分:0)

var rowCollection = GetData();

for(int iRow = 0; iRow < RowCount; iRow++)
{
    if(iRow["Col"] > 0)
    {
        rowCollection = GetData();
        RowCount=rowCollection.length();
        irow = 0;
    }
    else
    {
        //some processing statement
    }
}

答案 2 :(得分:-1)

不太确定您的用例是什么,但您可以这样做。

var rowCollection = GetData();

for(int iRow = 0; iRow < RowCount; iRow++)
{
    if(iRow["Col"] > 0)
    {
        rowCollection = GetData();
        irow = 0;
    }
    else
    {
        //some processing statement
    }
}