我有以下代码,我希望以最少的代码行数完成相同的工作。我该如何做到这一点?
List<Category> categoryList = new List<Category>();
categoryList = Category.LoadForProject(project.ID).ToList();
List<string> categories = new List<string>(Categories);
IList<Category> currentCategories = Category.LoadForProject(project.ID).ToList();
if (currentCategories != null)
{
foreach (var existingCategories in currentCategories)
{
if (categories.Contains(existingCategories.Name))
categories.Remove(existingCategories.Name);
else
existingCategories.Delete(Services.UserServices.User);
}
foreach (string item in categories)
{
Category category = new Category(project, item.ToString());
category.Project = project;
category.Save();
}
}
List<string> priorities = new List<string>(Priorities);
IList<Priority> currentPriorities = Priority.LoadForProject(project.ID).ToList();
if (currentPriorities != null)
{
foreach (var existingPriorities in currentPriorities)
{
if (priorities.Contains(existingPriorities.Name))
priorities.Remove(existingPriorities.Name);
else
existingPriorities.Delete(Services.UserServices.User);
}
foreach (string item in priorities)
{
Priority priority = new Priority(project, item.ToString());
priority.Project = project;
priority.Save();
}
}
var currentCategories = DoYourThing<Category>(Categories.ToList(), Category.LoadForProject(project.ID).ToList());
? - LazarusActivator.CreateInstance
而不是Activator.Create
吗? - Piers MyersActivator.CreateInstance
调用,而是选择一个可以在编译时验证的构造函数,您可以传递一个类型为Func<Project,string,T>
的 'builder' 参数,该参数可以通过调用方法的调用者使用 lambda 语法轻松指定:(p,s) => new Category(p,s)
。这还为调用者提供了额外的灵活性,例如,如果他们想要构建一些存根或派生版本的类别。 - Dan Bryant