具有多个return语句的函数如何工作?

时间:2014-01-11 23:32:50

标签: c# return

我正在攻读MCSD认证。以下是我的书中给出的示例代码

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;
    }

从上面你可以看到有很多return语句。这些退货声明如何运作?从上面可以看到" ValidateRequiredTextBox"功能使用了三次。

3 个答案:

答案 0 :(得分:1)

如果返回类型不是void,则return语句退出方法并返回给定值 返回语句之后执行的方法中唯一的语句是finally块中的那些语句或者使用块的对象(基本上是try-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 :(得分:0)

请参阅,返回始终有效,而不是倍数。这意味着在返回时发现代码表示编译器打破流程并转到方法的末尾,异常是try-catch-finally,其中控制返回到finally块并开始执行代码块。见下面的示例:

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

假设您正在填写这些行,并假设您的名称是jack,那么当它命中第一个if语句时它将检查条件并且因为它是真的所以它将返回true并且将在稍后停止执行代码块仅限功能。

答案 2 :(得分:0)

您的函数根据各种条件返回bool结果。重要的是如果一个return语句执行你的程序将不会转到下一行并退出该函数。

例如:

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

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

这里,如果第一次ValidateRequiredTextBox(descrTextBox, "Description")调用返回true,则函数将返回true并完成。它不会检查其他条件。但如果ValidateRequiredTextBox返回false,它将检查其他条件,因此上。