C# - 如何将类作为参数传递

时间:2016-03-12 00:29:45

标签: c# function class parameters global

所以我编写了一个代码来检查我的表单中是否有任何字段为空。我有多个表单,我必须在其中几个中使用此验证检查。我想将其写为全局函数,所以我不喜欢#39; t必须一次又一次地编写相同的代码行。但代码包含对" this"的引用。如何获取将其作为参数调用的表单类,以便我可以使代码全局化这是我的代码:

        // Checks if any field is empty.
        foreach (Control ctrl in this.Controls)
        {
            // Checking if it is a textbox.
            if (ctrl is TextBox)
            {
                TextBox txtbx = ctrl as TextBox;
                if (txtbx.Text == String.Empty)
                {
                    MessageBox.Show("Please fill all the fields.", "Empty Fields", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtbx.Focus();
                }
            }

            // Checking if it is a combobox.
            else if (ctrl is ComboBox)
            {
                ComboBox cmbbx = ctrl as ComboBox;
                if (cmbbx.Text == String.Empty)
                {
                    MessageBox.Show("Please fill all the fields.", "Empty Fields", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    cmbbx.Focus();
                }
            }
        }

对代码进行了哪些更改,以便可以全局使用。例如,可以通过这种方式调用它:

ValidateForm(this);

或者有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

您可以将该代码块移动到接受Form

的单独方法中
public class Helper
{
    public static void Validate(Form form)
    {
        foreach (Control ctrl in form.Controls)
        {
            ...
            ...
        }
    }
}

你也可以使用LINQ一次选择所有空控件,然后专注于第一个。

var invalidControls = form.Controls.Cast<Control>()
                          .Where(c => (c is TextBox || c is ComboBox) && c.Text == string.Empty);

if (invalidControls.Any())
{
    MessageBox.Show("Please fill all the fields", "Empty Fields",
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);

    invalidControls.First().Focus();
}

您可能希望一次性查看无效字段,因此用户无法修复一个,只是为了在以下每个字段上获得相同的消息,一次一个。