2016-10-22 7 views
0

я получил следующий код в моей программе:C# - Может ли/упростить/изменить этот фрагмент кода?

#region Handle 

    if(HandleLink(input)) 
     goto Handled; 
    else if(HandlePath(input)) 
     goto Handled; 
    else if(HandleGeneratedLink(input)) 
     goto Handled; 
    else ... 
    else 
     return; // Break if not handled 

#endregion 

Handled: 

Я не очень доволен этим, потому что мне кажется, что обманщик использовать Гото в каждой второй строке. Есть ли общий способ написать такую ​​вещь или это действительное решение?

+0

Вы могли бы попытаться установить логическое значение истина, и только установить его в ложное когда дело не обрабатывается. Если логическое значение true, вы можете использовать goto. – timmyRS

ответ

2

Вы также можете сделать что-то вроде этого:

if (!HandleLink(input) && !HandlePath(input) && !HandleGeneratedLink(input)) { 
    return; 
} 
// put the code related to "Handled" here 
+0

спасибо. Мне нравится этот ответ больше всего, потому что он занимает меньше места, и мне не нужно разделить действия (если/else) вокруг остальной части моего кода. –

0

Попробуйте

if(HandleLink(input) || HandlePath(input) || HandleGeneratedLink(input)) 
goto Handled; 
else 
return; 
1

Вы можете сделать что-то вроде этого:

if (HandleLink(input) || HandlePath(input) || HandleGeneratedLink(input)) { 
    // put the code below the "Handled" label here 
} else { 
    return; 
} 

Поскольку || оценивает правый операнд, только если левый операнд является ложным, HandlePath() не будет вызываться, когда HandleLink() возвращается правда. Он работает так же, как и ваш if...else if!

В качестве альтернативы, вы можете сделать переменную handled:

var handled = false; 
if (HandleLink(input) || HandlePath(input) || HandleGeneratedLink(input)) { 
    handled = true; 
} else { 
    return; 
} 

if (handled) { 
    // move the code below the "Handled" label here. 
}