продолжать <label>в C #, как в Java - PullRequest
4 голосов
/ 19 марта 2010

Мне нужен C #, эквивалентный продолжению Java?

у меня есть

for (String b : bar) {
    <label>
    try {
    }
    catch (EndpointNotFoundException ex) {
    continue <label>
    }
  }

как я могу смоделировать это в C #. Мне нужно это, когда я получаю исключение, что я повторяю код, не продолжайте.

Ответы [ 4 ]

5 голосов
/ 19 марта 2010

Использование goto <label>;

5 голосов
/ 19 марта 2010

Почему бы просто не добавить переменную управления?

foreach (String b in bar) {
  bool retry;
  do {
    retry = false;
    try {
      // ...
    }
    catch (EndpointNotFoundException ex) {
      retry = true;
    }
  } while (retry);
}

или

var strings = bar.GetEnumerator<string>();
var retry = false;
while (retry || strings.Next()) {
  var b = strings.Current;
  retry = false;
  try {
    // ...
  }
  catch (EndpointNotFoundException ex) {
    retry = true;
  }
}
5 голосов
/ 19 марта 2010

Если вам нужно только перейти к следующей итерации цикла, используйте continue.

c # также имеет ярлыки (к которым вы можете перейти с помощью goto), но, пожалуйста, не используйте их.

2 голосов
/ 19 марта 2010

Я не думаю, что вы пытаетесь сделать что-то мудрое - есть ли у вас основания ожидать, что вы не попадете в сценарий, в котором вы всегда получаете исключение на определенной итерации?

Во всяком случае, чтобы сделать то, что вы хотите сделать без goto, посмотрите на это:

foreach (String b in bar) { 
    while(!DidSomethingWithThisString(b))
        ;
  } 

bool DidSomethingWithThisString(string b)
{
    try { 
    } 
    catch (EndpointNotFoundException ex) { 
        return false;
    } 
    return true;
}
...