0
while (true)
{
    lock (groupslocker)
    {
        if (groups.Count == 0)
            break;
        else
            gr = groups.Dequeue();
    }
    string url = rand_url();
    int h = od_group_join(gr, url);
    if (h == -1)
    {
        // How to return to this line string url = rand_url(); ???
    }
    else
      .........
}

if (h == -1)から行に戻る方法string url = rand_url();???

4

4 に答える 4

3

ループが必要なようです:

int h;
string url;
do
{
   url = rand_url();
   h = od_group_join(gr, url);
} while (h == -1);

メソッドと変数の名前を変更したかったのですが、現在の名前から妥当な意味を推測するのは難しすぎます。より意味のある名前を使用し、.NET 命名規則に従うことを強くお勧めします。

于 2012-12-05T10:45:01.903 に答える
1
int h;
string url;
do
{
    url = rand_url();
    h = od_group_join(gr, url);
}
while(h == -1);
于 2012-12-05T10:45:28.673 に答える
0
while (true)
{
    lock (groupslocker)
    {
        if (groups.Count == 0)
            break;
        else
            gr = groups.Dequeue();
    }
    string url = rand_url();
    int h = od_group_join(gr, url);
    while (h == -1)
    {
        url = rand_url();
        h = od_group_join(gr, url);
    }

     .........
}
于 2012-12-05T10:45:47.413 に答える
0

再帰的なメソッド呼び出しを使用できます。コードのその部分を操作に移動します (私はそれを と名付けましたSubOperation)

static void SubOperation()
{
    string url = rand_url();
    int h = od_group_join(gr, url);
    if (h == -1)
    {
        // How to return to this line string url = rand_url(); ???
        SubOperation();
    }
    else
        .........
}

次に、代わりに新しい操作を呼び出すように元のコードを変更しますか?

        while (true)
        {
            lock (groupslocker)
            {
                if (groups.Count == 0)
                    break;
                else
                    gr = groups.Dequeue();
            }
            SubOperation();
        }
于 2012-12-05T10:54:32.063 に答える