有没有更好的方法来实现“自定义”业务验证器?

时间:2011-05-23 15:20:04

标签: c# winforms syntax user-controls c#-3.0

我有一个用户控件,我希望在winform上删除用户控件的开发人员可以在此用户控件执行某些操作之前测试一些值

我想知道我的方法是否良好以及是否有更好的方法可以做到这一点?

实际上,在我的用户控件中,我有一个公开公开的List<IValidator>集合,开发人员可以添加已实现的IValidator。此接口仅实现bool Validate()方法。

用户控件有一个名为Validate()的方法,它迭代List<IValidator>集合并调用Validate()方法。

以下是代码:

public partial class MyUserControl : UserControl
{
    private SqlConnection _connection;
    private List<IValidator> _validators;


    private void button1_Click(object sender, EventArgs e)
    {
        Validate();
    }

    private bool Validate()
    {
        foreach (IValidator validator in this.Validators)
        {
            validator.Validate();
        }
    }


    public List<IValidator> Validators
    {
        get { return _customValidators; }
        set { _customValidators = value; }
    }

}

winform中托管用户控件的代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }

    private void Form1_Load(object sender, EventArgs e)
    {
        Validator val1 = new Validator();
        myUserControl1.Validators.Add(val1);
    }
}


public class Validator : IValidator 
{
    public bool Validate()
    {
        return true;
    }
}

顺便说一句,我会知道它是否可以通过C#3语法(lambda等)进行“改进”或“简化”(没有实现接口)。

1 个答案:

答案 0 :(得分:1)

private void button1_Click(object sender, EventArgs e)
{
    this.Validators.ForEach(v => v.Validate());
}

甚至:

button1.Click += (sender, e) => { this.Validators.ForEach(v => v.Validate()); };