c#在循环中按对象类型控制程序流l
我正在使用一个允许用户将C.V.s添加到公司数据库的系统。文档由节组成,每个节可以有一个或多个字段。字段对应于映射到特定字段类型的用户控件。用户控件不会以任何方式绑定到文档对象,要从包含用户控件的页面将数据保存到文档,有一种方法如下:c#在循环中按对象类型控制程序流l,c#,C#,我正在使用一个允许用户将C.V.s添加到公司数据库的系统。文档由节组成,每个节可以有一个或多个字段。字段对应于映射到特定字段类型的用户控件。用户控件不会以任何方式绑定到文档对象,要从包含用户控件的页面将数据保存到文档,有一种方法如下: public void SaveData(Document document) { // Get all user controls on the page var userControls = FindDescendants<UserCon
public void SaveData(Document document)
{
// Get all user controls on the page
var userControls = FindDescendants<UserControl>(this);
foreach (var section in document.Sections)
{
foreach (var field in section.Fields)
{
if (field is Address)
{
var address = field as Address;
var addressControl = userControls.FirstOrDefault(o => o.ClientID.Contains(field.Id)) as AddressUserControl;
addressControl.SaveData(address);
}
else if (field is TelephoneNumbers)
{
var telephoneNumbers = field as TelephoneNumbers;
var telephoneNumbersControl = userControls.FirstOrDefault(o => o.ClientID.Contains(field.Id)) as TelephoneNumbersUserControl;
telephoneNumbersControl.SaveData(telephoneNumbers);
}
...
...
else if (field is Employment)
{
var employment = field as Employment;
var employmentControl = userControls.FirstOrDefault(o => o.ClientID.Contains(field.Id)) as EmploymentUserControl;
employmentControl.SaveData(employment);
}
}
}
}
public void SaveData(文档)
{
//获取页面上的所有用户控件
var userControls=findDescents(此);
foreach(document.Sections中的var节)
{
foreach(节字段中的变量字段)
{
如果(字段是地址)
{
var地址=作为地址的字段;
var addressControl=userControls.FirstOrDefault(o=>o.ClientID.Contains(field.Id))作为AddressUserControl;
addressControl.SaveData(地址);
}
else if(字段为电话号码)
{
var电话号码=作为电话号码的字段;
var telephoneNumbersControl=userControls.FirstOrDefault(o=>o.ClientID.Contains(field.Id))作为telephoneNumbersControl;
电话号码控制。保存数据(电话号码);
}
...
...
else if(字段为就业)
{
var就业=作为就业的字段;
var employmentControl=userControls.FirstOrDefault(o=>o.ClientID.Contains(field.Id))作为EmploymentUserControl;
employmentControl.SaveData(就业);
}
}
}
}
我不喜欢嵌套循环,每次添加新字段类型时,foreach中的条件语句都会增长
你知道如何更优雅地构造它吗?无论如何,你不能把
userControls.FirstOrDefault(o=>o.ClientID.Contains(field.Id)).SaveData(field)代码>并删除所有的如果?嗨,萝莉,谢谢你的帮助。不幸的是,没有,因为SaveData方法为每种类型的控件使用不同类型的参数,您是否可以修改UserControl和Field类的代码?