程序开发 > C# > 正文

return返回容易犯的错误(C#)

亮术网 2020-08-31 本网原创

在程序开发过程中,return 用于返回,既可以从子函数(方法)中返回,也可以通过返回结束当前程序的运行。尤其是后一种情况,稍不留意就有可能犯错误,为什么这么说?

 

C# return返回容易犯的错误

假如要实现一个提交产品表单的功能,有几个字段是必填项,为了确保安全,除了在前台用 Javascript 检查外,还要在后台再次用 C# 检查。一般检查的时候,如果发现必填字段为空,都要返回“必填字段不能为空”这样的提示,代码如下:

//提交代码
  protected void btn_Click(object sender, EventArgs e)
  {
    if (string.IsNullOrEmpty(tbProductName.Text))
    {
      lblErr.Text = "产品名称不能为空!";
      lblErr.Visible = true;
      return;//返回结束程序运行
    }
  }

 

代码中只写了一个“不能为空”提示,当准备写第2个提示的时候,就会发现代码实现跟第1个提示相同,所不同的只是提示文字不一样,代码如下:

//提交代码
  protected void btn_Click(object sender, EventArgs e)
  {
    if (string.IsNullOrEmpty(tbProductName.Text))
    {
      lblErr.Text = "产品名称不能为空!";
      lblErr.Visible = true;
      return;//返回结束程序运行
    }

  if (string.IsNullOrEmpty(tbPrice.Text))
    {
      lblErr.Text = "产品价格不能为空!";
      lblErr.Visible = true;
      return;//返回结束程序运行
    }
  }

如果每个提示都这样写,代码重复率太高,所以就把提示代码封装成一个方法,有不能为空提示的地方直接调用即可,代码如下:

//检查是否为空
  private void CheckEmpty(string val, string message)
  {
    if (string.IsNullOrEmpty(val))
    {
      lblErr.Text = message;
      lblErr.Visible = true;
      return;//返回结束程序运行
    }
  }

提交代码变为如下:

protected void btn_Click(object sender, EventArgs e)
  {
    CheckEmpty(tbProductName.Text, "产品名称不能为空!");
    CheckEmpty(tbPrice.Text, "产品价格不能为空!");
  }

不知您发现没有,就在把重复的提示代码顺理成章的封装成一个方法过程中,错误已经产生。或许您会问,代码还是原来的代码,没有任何变化怎么有错误。

 

return 从单击事件(btn_Click)移到方法(CheckEmpty)中的时候,发生了变化,从结束当前程序的运行变为从当前方法返回,即调用它的代码还会继续往下运行,违背了必填字段为空就返回结束程序运行的本意,所以必须把 return 上移,代码变为:

//检查是否为空
  private bool CheckEmpty(string val, string message)
  {
    if (string.IsNullOrEmpty(val))
    {
      lblErr.Text = message;
      lblErr.Visible = true;
      return true;
    }
    else
      return false;

  }

提交代码变为如下:

protected void btn_Click(object sender, EventArgs e)
  {
    if(CheckEmpty(tbProductName.Text, "产品名称不能为空!")) return;
    if(CheckEmpty(tbPrice.Text, "产品价格不能为空!")) return;
  }

 

附:前台代码:

<ul>
    <li>产品名称:<asp:TextBox ID="tbProductName" runat="server" /></li>
    <li>产品价格:<asp:TextBox ID="tbPrice" runat="server" /></li>
    <li><asp:Button ID="btn" runat="server" OnClick="btn_Click" />
      <asp:Label ID="lblErr" runat="server" Visible="false" />
    </li>
  </ul>

本文浓缩标签:returnC#返回