避免重复编码将局部变量传递给对象字段

时间:2017-04-15 01:36:40

标签: c# reflection generic-programming non-repetitive

我有一个DBReader类,它从多个数据库中读取数据。我有一个DBDataCache类,用于缓存特定数据库的数据,并具有成员变量,如ArrayList arlCostCentres, DataTable dtPriceLists等。

DBReader具有ReadListOfCostCentres, ReadPriceLists等方法,它将数据库名称作为参数,从数据库中读取数据并返回给调用者。此外,它应该将结果缓存到DBDataCache类中。

问题在于DBReader的每个方法,我需要为缓存编写相同的代码行,唯一的区别是我有数据的局部变量名,以及DBDataCache类的字段名我想存储局部变量。

示例:在ReadListOfCostCentres中:

dbData = (DBDataCache) mapDbDataCache[dbName.ToUpper()];
if (dbData == null)
{
    dbData = new DBDataCache();
}
dbData.arlCostCentres = arlCostCentres;

在ReadPriceLists中:

dbData = (DBDataCache) mapDbDataCache[dbName.ToUpper()];
if (dbData == null)
{
    dbData = new DBDataCache();
}
dbData.dtPriceLists = dtPriceLists;

有没有办法避免这种重复编码并使其更通用,或者至少将4行代码减少到一行,而不会降低性能?

在DBDataCache中,我希望每个重要表都有单独的字段。我不希望实现具有key = data name的通用SortedList(例如" Cost Centers"," Pricelists"),value = ArrayList或DataTable作为值。

我希望将重复代码移动到单独的函数CacheData,但是在DBDataCache中设置字段的代码每次都需要一个唯一的字段名称。

有解决方案吗?

感谢。

1 个答案:

答案 0 :(得分:0)

dbData = (DBDataCache) mapDbDataCache[dbName.ToUpper()];
dbData = dbData ?? new DBDataCache();
dbData.arlCostCentres = arlCostCentres;
  

我希望将重复代码移动到单独的函数CacheData,但是每次在DBDataCache中设置字段的代码都需要一个唯一的字段名称。

也许我并不完全明白,但将参数传递给这个单独的函数似乎很简单。