Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#在循环中按对象类型控制程序流l_C# - Fatal编程技术网

c#在循环中按对象类型控制程序流l

c#在循环中按对象类型控制程序流l,c#,C#,我正在使用一个允许用户将C.V.s添加到公司数据库的系统。文档由节组成,每个节可以有一个或多个字段。字段对应于映射到特定字段类型的用户控件。用户控件不会以任何方式绑定到文档对象,要从包含用户控件的页面将数据保存到文档,有一种方法如下: public void SaveData(Document document) { // Get all user controls on the page var userControls = FindDescendants<UserCon

我正在使用一个允许用户将C.V.s添加到公司数据库的系统。文档由节组成,每个节可以有一个或多个字段。字段对应于映射到特定字段类型的用户控件。用户控件不会以任何方式绑定到文档对象,要从包含用户控件的页面将数据保存到文档,有一种方法如下:

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类的代码?