2016-10-22 75 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: 

我不是很滿意的,因爲對我來說,似乎是一個騙子在每一個第二線使用goto語句。 有沒有一種常見的方式來寫這樣的事情,或者這是一個有效的解決方案?

+0

你可以嘗試一個布爾值設置爲true,只有它設置爲false當案件沒有處理。如果布爾值爲true,則可以使用goto。 – timmyRS

回答

2

你也可以做這樣的事情:

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

謝謝。我最喜歡這個答案,因爲它佔用了最少的空間,而且我不必在我的其他代碼中分割動作(if/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. 
}