2010-03-19 4 views
4

J'ai besoin de C# équivalent à Java continuer?continuer à <label> en C# comme dans Java

i ont

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

Comment puis-je simuler cela en C#. J'ai besoin que quand je reçois l'exception que je répète le code ne continue pas.

+0

Voulez-vous une nouvelle tentative de la même valeur? Sinon, utilisez simplement continuer. –

+0

oui j'ai besoin de réessayer une nouvelle valeur – senzacionale

+1

Si vous interceptez l'exception en C# et que vous ne faites rien dans le bloc catch, la boucle passera à l'élément suivant - avec votre code tel quel, il réessaiera le même élément (et vraisemblablement continuellement jeter la même exception). Êtes-vous sûr que c'est vrai? –

Répondre

5

Utilisez goto <label>;

+1

donc goto ne sont pas si mal. Thx foy notre aide, je vais utiliser

+5

@senzacionale, 'goto' n'est pas mal, juste très dangereux. Le fait que 'goto' existe en C# ne le rend pas sûr - et l'utilisation que vous avez choisie semble dangereuse à plusieurs égards. – jball

5

Si vous devez uniquement passer à l'itération de boucle suivante, utilisez continue. C# a également des étiquettes (auxquelles vous pouvez accéder directement avec goto), mais ne les utilisez pas s'il vous plaît.

+5

Vous avez oublié d'ajouter que les goto sont mauvais: p – Stormenet

+3

Seuls les goto non-locaux sont mauvais. C# n'autorise pas goto non local. –

+0

D'une discussion sur les boucles et continue (dans les réponses d'Eric aux commentaires): "Notez que le C# goto a été soigneusement conçu pour être moins dangereux que les gotos d'autres langues." http://blogs.msdn.com/ericlippert/archive/2010/01/11/continuing-to-an-outer-loop.aspx – Brian

5

Pourquoi pas simplement ajouter une variable de contrôle?

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

ou

var strings = bar.GetEnumerator<string>(); 
var retry = false; 
while (retry || strings.Next()) { 
    var b = strings.Current; 
    retry = false; 
    try { 
    // ... 
    } 
    catch (EndpointNotFoundException ex) { 
    retry = true; 
    } 
} 
+1

Beaucoup plus facile à lire et à comprendre. – FrustratedWithFormsDesigner

+0

+1 C'est la bonne réponse. –

2

Je ne pense pas que ce que vous essayez de faire est sage du tout - avez-vous une raison de croire que vous ne frapperez pas un scénario dans lequel vous avez toujours obtenir une exception sur une itération particulière?

Quoi qu'il en soit, pour faire ce que vous voulez faire sans goto, regardez ceci:

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

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