У меня есть функция который перебирает список и должен возвращать подсписок T с помощью Linq:
Код: Выделить всё
public class ListOfT : List
{
//no explicit constructor
//other functions to work on this list of T's ...
public ListOfT GenerateSubList()
{
return this.Where(t => t.SomeCriteria).ToList(); // t.SomeCriteria).ToList(); // t.SomeCriteria));
}
}
@Tim Schmelter: Часть t.SomeCriteria должна была указать, что каждый экземпляр T, содержащийся в списке, имеет свойство, которое я хочу проверить, чтобы включить его в подсписок. Спасибо за ссылку на «Почему бы не наследовать от List», я читал ее, ожидая ответов. См. мои комментарии ниже относительно «имеет» и «есть».
Кроме того, (@Rookie), да, новый список, возвращаемый функцией GenerateSubList(), не будет содержать копий. исходных элементов, но ссылки на исходные T, хранящиеся в экземпляре ListOfT, я вызываю GenerateSubList(). Так и было задумано.
@Орен Тамам и @Fildor: Я не пошел по пути "имеет" вместо "есть" >, поскольку для этого мне потребовалось бы реализовать интерфейс IList. Как упоминалось выше @Tim, ведется продолжительная дискуссия о том, почему бы не использовать классы, производные от List. Лично я считаю, что это хороший способ собрать в одном месте функции, работающие со списками определенного типа. По моему мнению, разница между имеет и есть сводится к личному выбору и сценарию, в котором вы его используете.
@Ralf упомянул методы расширения как еще один способ «улучшить» конкретный тип списка. Я использовал их в некоторых местах, где у меня была иерархия классов, где каждый потомок должен был быть «перечислен». В этом случае статический класс, содержащий расширения, был хорошим способом собрать все функции моего зоопарка классов, связанные со списками, в одном месте.
Подробнее здесь: https://stackoverflow.com/questions/784 ... from-listt
Мобильная версия