如何在 C# 中的 class 中使用 return 语句

How to use return statement inside a class in c#

我是 c# 新手。我有不同文本框的代码块。我决定为此代码创建 class 以用于不同的 windows 形式。

这是我的 windows 表单代码

using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace POS.screens
{
    public partial class sell : MetroFramework.Forms.MetroForm
    {
        ConnectionClass cons = new ConnectionClass();
        FillComboBox fcb = new FillComboBox();
        {
            InitializeComponent();
        }



        public void PriceTextBox_TextChanged(object sender, EventArgs e)
        {

            if (String.IsNullOrEmpty(QuantityTextBox.Text) || String.IsNullOrEmpty(PriceTextBox.Text))
            {
                TotalTextBox.Text = 0.ToString();
                
            }

            else
            {
                fcb.CheckNumbersOnly(PriceTextBox);

                int Quantity = Convert.ToInt32(QuantityTextBox.Text);
                decimal Price = Convert.ToDecimal(PriceTextBox.Text);
                decimal Total = Price * Quantity;
                TotalTextBox.Text = Total.ToString();
            }
        }
    }
}

这是Class代码

using System.Data.SqlClient;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace POS
{
    class FillComboBox
    {
        ConnectionClass cons = new ConnectionClass();

        public void CheckNumbersOnly(dynamic TextBoxName)
        {
            if (!Regex.IsMatch(TextBoxName.Text, @"[0-9]+(\.[0-9][0-9]?)?") && (TextBoxName.Text != ""))
            {
                MessageBox.Show(TextBoxName.Text);
                return;
            }
            if (!decimal.TryParse(TextBoxName.Text, out decimal PriceValue))
            {
                MessageBox.Show("Please Enter Correct Number");
                TextBoxName.Clear();
                return;
            }
        }
    }
}

一切正常,但是 return 语句不工作。如果用户插入字母或不正确的数字。程序应显示消息并停止进一步工作,但它不会停止。它显示消息和 运行 下一条语句并给出错误。

当我直接使用这段代码而不创建 class 时它工作正常。 我认为,我在 class 中使用 return 语句的方式是错误的。 我是新学习者。 提前致谢。

有多种方法可以做到这一点,一个简单的方法是将 CheckNumbersOnly 方法转换为 return 布尔值。最好也重命名它(为了便于阅读),然后在 PriceTextBox_TextChanged 方法中,您将检查 return 是否为真,只有在为真时才继续。

综合起来:

验证码:

public bool NumbersAreValid(string value)
{
   if (!Regex.IsMatch(value, @"[0-9]+(\.[0-9][0-9]?)?") && (value != ""))
   {
      //Note: this isn't a very good error message, and the above Match 
      // check seems to redo the work of `TryParse` bellow
      MessageBox.Show(value);
      //Let caller know this failed validation
      return false;
   }
   if (!decimal.TryParse(value, out decimal PriceValue))
   {
      MessageBox.Show("Please Enter Correct Number");
      return false;
   }
   return true;
}

表单代码:

public void PriceTextBox_TextChanged(object sender, EventArgs e)
{
   if (String.IsNullOrEmpty(QuantityTextBox.Text) || String.IsNullOrEmpty(PriceTextBox.Text))
   {
      TotalTextBox.Text = 0.ToString();
   } 
   else 
   {
      //When NumbersAreValid returns false, this if statement ends processing
      if (!fcb.NumbersAreValid(PriceTextBox.Text)) return;

      int Quantity = Convert.ToInt32(QuantityTextBox.Text);
      decimal Price = Convert.ToDecimal(PriceTextBox.Text);
      decimal Total = Price * Quantity;
      TotalTextBox.Text = Total.ToString();
   }
}

还有其他一些注意事项,您的 PriceTextBox_TextChanged 方法重复了验证方法的工作(通过重新解析数字)..因此验证方法可以代替 return 一个小数点或抛出异常 - 异常的内容将是要在 MessageBox 中显示的消息。然后,您需要将验证尝试包装在 try {} catch{} 块中。您似乎也使用了 QuantityTextBox 没有任何验证 - 但也许这只是为了这个例子。