2009-12-21 5 views
2

J'ai une instruction if dans une instruction if.leave if instruction

Si la condition dans la deuxième instruction if renvoie la valeur false, je veux passer à la première car elle définit mes contrôles de validation automatiquement.

J'espère que vous comprenez

if (page.isvalid()) 
{ 
    if (datetime.tryparse (date) == true) 
    { 
     // ok  
    } 
    else 
    { 
     //go to the other else 
    } 
} 
else 
{ 
    // want to go here 
} 

Edit:

important est que je dois d'abord valider la page, car après la validation, je sais que je peux analyser les datetimes des 2 contrôles d'entrée et contrôle si le second est plus grand que le premier. Sinon, une exception peut être émise si la date n'est pas valide.

Répondre

1

Prenez le elses, et il devrait être ce que vous cherchez. En outre, ajoutez une déclaration de retour après que tout est bon à faire.

if (page.isvalid()) 
{ 
    if (datetime.parse (date) == true) 
    { 
     // ok  
    } 
    return; 
} 

// code here happens when it's not valid. 
+0

cela fonctionne avec peu s'adapte. hmm semble ne pas être si propre mais ... pas d'autres solutions complètes –

+1

que voulez-vous dire par "propre"? c'est le contrôle de flux de base. Rappelez-vous, dans les langages .NET, les méthodes void retournent implicitement lorsque le dernier '}' est rencontré. Quitter une méthode à tout moment est complètement valide. Selon votre contexte, vous devrez peut-être inverser la logique pour dire 'if (! Page.IsValid) {/ * bloc de code invalide * /} else {/ * code valide * /}'. Une autre option serait de refactoriser le code 'valide' et le code 'invalide' en méthodes et dire 'if (Page.IsValid()) {ValidMethod():} else {InValidMethod();}' –

9

au lieu de DateTime.Parse (date) utilisent

DateTime dt; 
bool isParsed = DateTime.TryParse(date, out dt); 

//if (page.isvalid() && (datetime.parse (date) == true)) 
if (page.isvalid() && isParsed) 
{   
    // ok   
}  
else  
{  
    // want to go here 
} 
+0

C'est une bonne vérification booléenne, mais elle tomberait dans la section // vouloir aller ici quand la page est valide et que datetime ne l'analyse pas, ce qui ne semble pas correct. –

+1

Cela peut ne pas sembler "juste", mais c'est exactement ce que demande le demandeur de question. –

+0

@Jim - c'est ce que le PO a demandé! – Dexter

1

Cela fait exactement ce que vous voulez, je crois.

if (page.isvalid() && datetime.tryparse(date) == true) 
{   
    // ok 
} 
else 
{ 
    // want to go here 
} 

Il n'est pas clair si le '== vrai' est nécessaire; vous pourriez être en mesure d'abandonner cette condition.

0

Exactement ce que vous voulez faire est impossible. Il y a deux options. L'une consiste à déterminer les deux réponses en haut de votre clause if. C'est ce que les autres affiches vous disent de faire. Une autre option serait quelque chose comme ceci:

bool isvalid = true; 
if (page.isvalid()) 
{  
    if (datetime.tryparse (date) == true)  
    {   
     // ok   
    } 
    else  
    {  
     isvalid = false;  
    } 
} 
else 
{ 
    isvalid = false; 
} 
if (isvalid == false) 
{ 
    //do whatever error handling you want 
} 

Cet extrait le code de gestion des erreurs de votre article d'autre et met quelque part les deux chemins de code peuvent atteindre.

+0

Très verbeux - précis, mais très verbeux. –