我有三种可能的输入类别,分别是人名,公司名或地址。
忽略我的占位符和自定义方法,其中有两个:
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_Click()
成为嵌套语句的相对泥潭,我想避免这种方法。
根据我的一些研究,做到这一点的方法是使用委托空白,但是我不知道如何实现这一点。我的验证方法是委托吗?或者我必须创建一个新的委托方法并将我的Click
事件的内容移动到它吗?
此外,如何添加逻辑以确定输入类别是什么?
答案 0 :(得分:0)
创建验证委托是一种可接受的方法:
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
。这样,验证方法实际上仅限于处理验证。调用函数将负责处理失败/成功。