c#有更好的方法来验证用户输入

Dav*_*don 4 c# validation if-statement

我有以下代码:

private void btnOK_Click(object sender, EventArgs e)
    {
        if (!string.IsNullOrEmpty(tbVendorName.Text))
        {
            VendorName = tbVendorName.Text;
            if (!string.IsNullOrEmpty(rtbVendorAddress.Text))
            {
                VendorAddress = rtbVendorAddress.Text;
                if (!string.IsNullOrEmpty(tbVendorEmail.Text))
                {
                    VendorEmail = tbVendorEmail.Text;
                    if (!string.IsNullOrEmpty(tbVendorWebsite.Text))
                    {
                        VendorWebsite = tbVendorWebsite.Text;
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Vendor Website Required");
                    }
                }
                else
                {
                    MessageBox.Show("Vendor email is required");
                }
            }
            else
            {
                MessageBox.Show("Vendor address is required");
            }
        }
        else
        {
            MessageBox.Show("Vendor name is required");
        }
    }
Run Code Online (Sandbox Code Playgroud)

但它看起来很可怕.有没有更好的办法?或者甚至是一种使代码更具可读性的替代方法?

Age*_*ire 6

更好的方法是掌握MVVM模式.在那里你可以创建一个ViewModel并在那里定义所有输入数据:

class VendorViewModel
{
    [Required]
    public string Name { get; set; }

    public string Website { get; set; }

    [Regex("regex for email")]
    public string Email { get; set; }

    [MaxLength(160)]
    public string Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后框架将在每个文本框或任何其他输入元素之后显示输入错误(如果有).将根据正确验证的所有字段自动设置按钮的启用属性.

  • 看起来这可以在`WPF`中轻松完成,但如果OP使用`Winforms`会怎样? (2认同)
  • 顺便说一下,我不会说基于属性的验证应该与MVVM绑定.有各种验证框架以这种方式工作,它们可用于任何层和技术...... (2认同)