Ich habe den folgenden Code und ich möchte es auf eine Weise schreiben, dass ich minimale Zeilen Code habe und die Arbeit auf die gleiche Weise erledigt wird. Wie kann ich das machen?Wie kann ich Code-Duplizierung vermeiden
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 ist eine nette Lösung ... Ihr Aufruf müsste den Typ hinzufügen würde es nicht, dh 'var currentCategories = DoYourThing (Categories.ToList(), Category.LoadForProject (project.ID) .ToList()) ; '? –
Lazarus
@Lasarus: Nein. Wenn der Typ von den Parametern abgeleitet werden kann (wie in diesem Fall), ist die Typdeklaration für die Methode redundant. :) –
@Brian Genisio Ihr Recht, das ist unglaublich schwer zu kommen, wenn Sie den Activator.Create Teil nicht verstehen. Das ist ein einfaches Genie. – msarchet