Я только что создал следующий метод в одном из моих классов
public static bool Assimilate(this List<Card> first, List<Card> second)
{
// Trivial
if (first.Count == 0 || second.Count == 0)
{
return false;
}
// Sort the lists, so I can do a binarySearch
first.Sort();
second.Sort();
// Copia only the new elements
int index;
for (int i = 0; i < second.Count; i++)
{
index = first.BinarySearch(second[i]);
if (index < 0)
{
first.Insert(~index, second[i]);
}
}
// Edit
second = null;
return true;
}
И мой друг, просматривая мой код, сказал, что мне не следует создавать методы, которые «расширяют класс List», так как это нарушает принцип открытости/закрытости. Если я хочу расширить список классов, я должен создать новый класс, который наследуется от списка, и реализовать мой метод «слияния» в этом новом классе. Он прав? Расширение класса List нарушает принцип Open/Closed?
second
ускорит поиск? Вы перебираете его по одному элементу за раз. Сортировкаsecond
ничего не улучшает. Даже если прямо сейчас вы не используете его после вызова метода, вы все равно должны думать о последствиях своего дизайна и не иметь ненужных побочных эффектов (в конце концов, хороший дизайн не совсем то, что это вопрос о чем?). - person JLRishe   schedule 25.04.2014