C# 在这里使用代理是否合适?

C# 在这里使用代理是否合适?,c#,validation,webforms,delegates,C#,Validation,Webforms,Delegates,我有三种可能的输入类型,分别是人名、公司名或地址 忽略我的占位符和自定义方法,以下是其中两个: protected void nameSearch_Click(object sender, EventArgs e) { if (offRadio.Checked == false && comRadio.Checked == false) { errorAlert("Please sp

我有三种可能的输入类型,分别是人名、公司名或地址

忽略我的占位符和自定义方法,以下是其中两个:

 protected void nameSearch_Click(object sender, EventArgs e)
        {
            if (offRadio.Checked == false && comRadio.Checked == false)
            {
                errorAlert("Please specify the search type");
            }
            else
            {

                strValidator(nameBox.Text);// This is the function I need to change.
                          //In it's current condition, it will only validate against
                          // general properties, however to do more in depth
                          // validation, the validation method needs to be dependant
                          // on the type of input


                if (nameBox.Text != string.Empty)
                {
                    if (offRadio.Checked == true) 
                                   //This is an input of the person name category
                    {
                        logic.createQuery(fnms(nameBox.Text), 
                                                  "personName", lnms(nameBox.Text));
                    }
                    else if (comRadio.Checked == true)
                                   //And this is of the Company name category
                    {
                        logic.createQuery(nameBox.Text, "companyName");
                    }
                }
                else
                {
                    errorAlert("Please enter a search parameter");
                }
            }
        }
这里的目的是分析来自
nameBox.Text
的输入,并根据反注射协议对其进行检查。理想情况下,我希望使用一种方法来实现这一点,并且该方法根据输入是来自人名(
offRadio.Checked=true
)还是公司名(
comRadio.Checked=true
)而有所不同。我可以有两种方法(甚至一种,基于条件),但这会导致
nameSearch\u Click()
成为嵌套语句的相对泥潭,我希望避免这种情况

根据我的一些研究,实现这一点的方法是使用委托无效,但是我不知道如何实现这一点。我的验证方法是否为委托?或者我必须创建一个新的委托方法,并将我的
Click
事件的内容移动到其中


此外,如何添加逻辑以确定输入类别?

创建验证委托是一种可接受的方法:

delegate void Validate(string text);

protected void nameSearch_Click(object sender, EventArgs e)
{
    Validate validate;

    if (offRadio.Checked)
        validate = PersonNameValidator;
    else if (comRadio.Checked)
        validate = CompanyNameValidator;
    else
        validate = GeneralValidator;

    validate(nameBox.Text);

    ... More code, blah blah ...
}

private void PersonNameValidator(string text)
{
    // Validate person name
}

private void CompanyNameValidator(string text)
{
    // Validate company name
}

private void GeneralValidator(string text)
{
    // Validate general properties
}

通常,我希望
Validate
委托返回类型
bool
,以便在失败时返回
false
,或在成功时返回
true
。这样一来,验证方法实际上仅限于处理验证。调用函数将负责处理失败/成功。

为什么
委托
?您不能使用一些参数(单选按钮的值或基于其值的
enum
值)调用一些验证类的方法吗?例如,
Validator.CheckUrl(textBoxUrl.Text,Validator.Mode.TrimSpaces)
@Sinatr这个想法是为了让代码尽可能小,但是你可能是对的,你的建议可能是我的。。。“最安全”选项。请显示大代码,我们将看到。使用代理在这里没有任何价值。与其分配委托,不如调用该方法;它在功能上是相同的。@Servy你可能是对的。但是,我个人认为意图更清楚,特别是如果if/else链不仅仅是分配validate变量。它将验证调用放在一个地方,而不是分散在多行if/else混乱中。它还清楚地显示和保证验证方法具有相同的签名。您不能让一个验证器返回bool,而另一个验证器返回其他内容。@Servy在本例中,我认为我在这里同意它的ME86,尽管我对委托有了更多的了解,并且实现方式略有不同。