2014-01-11 78 views
-6

我正在攻讀MCSD認證。下面給出的是我的書中給出的示例代碼具有多個return語句的函數是如何工作的?

private bool ValidateRow(TextBox descrTextBox, TextBox quantityTextBox, 
     TextBox priceEachTextBox, out int quantity, out decimal priceEach) 
{ 
    // Assume these are 0. 
    quantity = 0; 
    priceEach = 0; 

    // If no values are present, the row is okay. 
    if ((descrTextBox.Text == "") && 
     (quantityTextBox.Text == "") && 
     (priceEachTextBox.Text == "")) 
     return false; 

    // Some values are present to make sure all are. 
    if (ValidateRequiredTextBox(descrTextBox, "Description")) return true; 
    if (ValidateRequiredTextBox(quantityTextBox, "Quantity")) return true; 
    if (ValidateRequiredTextBox(priceEachTextBox, "Price Each")) return true; 

    // All values are present. 
    // Try to parse quantity. 
    if (!int.TryParse(quantityTextBox.Text, out quantity)) 
    { 
     // Complain. 
     DisplayErrorMessage(
      "Invalid format. Quantity must be an integer.", 
      "Invalid Format", quantityTextBox); 
     return true; 
    } 

從上面你可以看到有很多返回語句。這些返回聲明如何工作?正如你可以從上面看到的「ValidateRequiredTextBox」函數使用三次。

+11

如果你被禁止在谷歌 - [返回(C#參考)](http://msdn.microsoft.com/en-us/library/1h3swy84.aspx) –

+2

你是什麼意思他們如何工作?他們返回函數說它將返回的類型。有多個,因爲代碼可以採用多個路徑。 – tymeJV

+0

「ValidateRequiredTextBox」方法用不同的參數調用。所以它會根據輸入參數的不同而返回true或false。 'return'只會根據'if'語句的結果而發生。 –

回答

1

如果返回類型不是void,則返回語句將退出該方法並返回給定值。該方法被return語句後執行
唯一的語句是在finally塊中的那些或處置利用塊的對象(其本質上是嘗試,最後一種特殊形式):

private void TestMethod() 
{ 
    // Do something 
    if (conditionIsMet) 
     return; // Exits the method immediately 

    try 
    { 
     // Do something 
     if (conditionIsMet) 
      return; // Statements in finally block will be executed before exiting the method 
    } 
    finally 
    { 
     // Do some cleanup 
    } 

    using (var disposableObj = new DisposableObject()) 
    { 
     // Do something 
     if (conditionIsMet) 
      return; // disposableObj will be disposed before exiting the method 
    } 
} 
+1

這不是唯一的情況。當''使用'塊返回時''Dispose'方法將被調用。你可以說這是'finally'的一個特例,因爲'using'是編譯器解決的問題,但我認爲這很值得一提。 – MarcinJuraszek

+0

@MarcinJuraszek:是的,你說的對 - 我忘了使用;我會相應地更新這篇文章。 – Markus

0

請參閱,返回總是工作一次,而不是倍數。這意味着無論發現返回代碼說編譯器打破流程並進入方法的結尾,異常是try-catch-finally,其中控制返回到最終阻止並開始執行代碼塊。請參見下面的示例:

//few codes 
string yourname ="jack"; 
if(yourname="jack") 
    return true; 
if(yourname="pedro") 
    return false; 
// more codes 

說你是compilling這些線路,並假設你的名字是傑克那麼當它遇到第一個if語句將檢查情況和因爲它的真實所以它會返回true,將停止執行之後的代碼塊僅用於該功能。

0

您的函數根據各種條件返回布爾結果。重要的是如果一個return語句執行你的程序將不會進入下一行並退出函數。

例如:

if (ValidateRequiredTextBox(descrTextBox, "Description")) return true; 

if (ValidateRequiredTextBox(quantityTextBox, "Quantity")) return true; 

在這裏,如果第一ValidateRequiredTextBox(descrTextBox, "Description")調用返回true,你的函數將返回true和completed.It不會檢查其他condition.But如果ValidateRequiredTextBox返回false,它會檢查其他條件等。

相關問題