我有一些方法。我如何重构此代码以使用泛型方法?
第一种方法:
void ChangeProjectName(DataModel dataModel)
{
foreach (Project project in dataModel.Projects)
{
string projectName = project.Name;
projectName = ChangeName(projectName);
project.Name = projectName;
}
dataModel.SubmitChanges();
}
第二种方法:
void ChangeEmployeeName(DataModel dataModel)
{
foreach (Employee employee in dataModel.Employees)
{
string employeeName = employee.Name;
employeeName = ChangeName(employeeName);
employee.Name = employeeName;
}
dataModel.SubmitChanges();
}
最佳答案
我们必须能够得到 T
从模型中适当的属性类型集合,所以我们必须为它传递一个选择策略:
void ChangeName<T>(DataModel dataModel,
Func<DataModel, IEnumerable<T>> selector)
where T : IHaveName
{
foreach (T x in selector(dataModel))
{
x.Name = ChangeName(x.Name);
}
dataModel.SubmitChanges();
}
和用法:
ChangeName(model, x => x.Projects);
您可以添加 Action<T>
参数并传递给它 x => x.Name = ChangeName(x.Name)
如果你想避免 IHaveName
接口(interface)(或基类等)。
关于c# - 使用泛型重构重复方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31569446/