При этом я имею в виду, что это похоже на соединение Linq, группу, отдельный и т. Д., Работая только с последовательностями значений, а не с коллекциями.
Разница между последовательностью и коллекцией в том, что последовательность может быть бесконечной по длине, тогда как коллекция конечна.
Позволь мне привести пример:
var c1 = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var c2 = FunctionThatYieldsFibonacciNumbers();
var c3 = c1.Except(c2);
Это не работает. Реализация Except не работает на том основании, что числа в любом наборе будут строго возрастающими или убывающими, поэтому он сначала пытается собрать все значения из второго набора в набор (или аналогичный), и только после этого он начать перечисление первой коллекции.
Предполагая, что приведенная выше функция является просто циклом While, который не завершится, если вы явно не прекратите его перечисление, приведенный выше код завершится ошибкой с исключением из-за нехватки памяти.
Но, учитывая, что у меня есть коллекции, которые считаются строго восходящими или нисходящими, есть ли уже какие-либо реализации в .NET 4.0, которые могут делать:
- Дайте мне все значения, общие для обоих (внутреннее соединение)
- Дайте мне все значения обоих (объединение/внешнее соединение)
- Дайте мне все значения в последовательности №1, которых нет в последовательности №2
Мне нужна функциональность такого типа, связанная с системой планирования, которую мне нужно построить, где мне нужно делать такие вещи, как:
c1 = the 1st and 15th of every month from january 2010 and onwards c2 = weekdays from 2010 and onwards c3 = all days in 2010-2012 c4 = c1 and c2 and c3
В основном это даст мне каждое 1-е и 15-е число каждого месяца с 2010 по 2012 год, но только тогда, когда эти даты выпадают на будние дни.
С такими функциями было бы намного проще генерировать рассматриваемые значения без явного создания из них коллекций. В приведенном выше примере для создания первых двух коллекций необходимо знать ограничение третьей коллекции, и примеры могут стать намного более сложными, чем приведенные выше.
<pre>
должен быть в начале строки и сам по себе. - person Abel   schedule 29.06.2010