Creating method to use one foreach instead multiple

  • A+
Category:Languages

I'm working with c#, and I have working code where I repeated same code every line, and that's because I'm creating list, conversions , extracting data etc.

So I have multiple foreach clauses,multiple lists, multiple conversions of list to datatables. My question is, what can I do to re-factorize this in order to have clean code?

Code:

private void BtnLoadReport_Click(object sender, EventArgs e) {    var db = new SQLDataMgr();     List<string> DesignStatusList = new List<string>();    List<string> ShopStatusList = new List<string>();    List<string> CustomerTypeList = new List<string>();    List<string> CustomerList = new List<string>();    List<string> ResellerList = new List<string>();    List<string> StateList = new List<string>();    List<string> ProjectManagerList = new List<string>();    List<string> SalesRepresentativeList = new List<string>();     var checkedDesignStatus = cboDesignStatus.CheckBoxItems.Where(x => x.Checked);    var checkedShopStatus = cboShopStatus.CheckBoxItems.Where(x => x.Checked);    var checkedCustomerType = cboShopStatus.CheckBoxItems.Where(x => x.Check           var checkedCustomer = cboShopStatus.CheckBoxItems.Where(x => x.Checked);    var checkedReseller = cboShopStatus.CheckBoxItems.Where(x => x.Checked);    var checkedState = cboShopStatus.CheckBoxItems.Where(x => x.Checked);    var checkedProjectManager = cboShopStatus.CheckBoxItems.Where(x => x.Checked);    var checkedSalesRepresentative = cboShopStatus.CheckBoxItems.Where(x => x.Checked);     foreach (var i in checkedDesignStatus)    {       DesignStatusList.Add(i.Text);    }    foreach (var i in checkedShopStatus)    {       ShopStatusList.Add(i.Text);    }    foreach (var i in checkedCustomerType)    {       CustomerTypeList.Add(i.Text);    }    foreach (var i in checkedCustomer)    {       CustomerList.Add(i.Text);    }    foreach (var i in checkedReseller)    {       ResellerList.Add(i.Text);    }    foreach (var i in checkedState)    {       StateList.Add(i.Text);    }    foreach (var i in checkedProjectManager)    {       ProjectManagerList.Add(i.Text);    }    foreach (var i in checkedSalesRepresentative)    {       SalesRepresentativeList.Add(i.Text);    }    DataTable designStatusParameters = ToStringDataTable(DesignStatusList);    DataTable shopStatusParameters = ToStringDataTable(ShopStatusList);    DataTable customerTypeParameters = ToStringDataTable(CustomerTypeList);    DataTable customerParameters = ToStringDataTable(CustomerList);    DataTable resellerParameters = ToStringDataTable(ResellerList);    DataTable stateParameters = ToStringDataTable(StateList);    DataTable projectManagerParameters = ToStringDataTable(ProjectManagerList);    DataTable salesRepresentativerParameters = ToStringDataTable(SalesRepresentativeList); } 

 


Change ToStringDataTable to an extension method. Then:

var designStatusParameters = cboDesignStatus.CheckBoxItems.Where(x => x.Checked)     .Select(i => i.Text).ToList().ToStringDataTable(); 

You can even write the extension method for your control in a way that performs filtering, projection and converting to data table for you then you can have:

var designStatusParameters = cboDesignStatus.ToStringDataTable(); 

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: