2009-12-21 3 views
2

У меня есть оператор if внутри оператора if.leave if statement

Если условие во втором операторе if возвращает false, я хочу перейти к первому другому , потому что он автоматически устанавливает мои проверки.

Я надеюсь, вы понимаете

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

Edit:

Важно то, что я должен сначала проверить страницу, так как после проверки, я знаю, что могу разобрать DateTimes из 2 входных контроля и проверки если вторая больше первой. В противном случае это исключает, может быть, если дата недействительна.

ответ

1

Вынимают вернулись на Родину, и это должно быть то, что вы ищете. Кроме того, добавьте оператор return после того, как все будет хорошо.

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

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

это работает с мало приспосабливается. hmm кажется не таким уж правильным, но ... никаких других полных решений –

+1

что вы подразумеваете под «правильным»? это базовое управление потоком. Помните, что на языках .NET языковые методы неявно возвращаются, когда выполняется последний '}'. Выход из метода в любой точке полностью действителен. В зависимости от вашего контекста вам может потребоваться перевернуть логику, чтобы сказать 'if (! Page.IsValid) {/ * недопустимый кодовый блок * /} else {/ * действительный код * /}'. Другим вариантом было бы рефакторинг кода «valid» и «invalid» в методы и сказать «if (Page.IsValid()) {ValidMethod():} else {InValidMethod();}' –

9

вместо DateTime.Parse (дата) использование

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

Это хорошая булева проверка, но она попадет в // захочет перейти сюда в раздел, когда страница действительна, а datetime не анализирует, что кажется неправильным. –

+1

Это может показаться не «правильным», но это именно то, о чем спрашивает вопрос. –

+0

@Jim - это то, о чем попросил ОП! – Dexter

1

Это делает именно то, что вы хотите, я верю.

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

Неясно, требуется ли '== true'; вы можете отказаться от этого условия.

0

Точно, что вы хотите сделать, невозможно. Есть два варианта. Один из них - определить оба ответа в верхней части вашего предложения if. Это то, что вам говорят другие плакаты. Другой вариант был бы что-то вроде этого:

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 
} 

Это извлекает код обработки ошибок от ваших еще статей и помещает его где-то оба путь кода может достичь.

+0

Очень подробный - точный, но очень многословный. –