У меня есть следующий код, и я хотел бы написать его так, чтобы у меня были минимальные строки кода, и работа выполняется одинаково. Как я могу это сделать?Как избежать дублирования кода
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();
}
}
Generics - отличное решение ... вашему звонку потребуется добавить тип, не так ли, то есть 'var currentCategories = DoYourThing (Категории.ToList(), Category.LoadForProject (project.ID) .ToList()) ; '? –
Lazarus
@Lasarus: Нет. Когда тип может быть выведен параметрами (как в этом случае), объявление типа в методе является избыточным. :) –
@Brian Genisio ваше право, которое невозможно получить, если вы не понимаете Activator.Create part. Это простой гений. – msarchet