Джон Скит иногда делает демонстрацию LINQ в прямом эфире, чтобы объяснить, как это работает. Представьте, что на сцене три человека. Слева у нас есть один парень, у которого есть перемешанная колода карт. В середине у нас есть один парень, который раздает только красные карточки, а справа у нас есть парень, который хочет карты.
Парень справа ткнет парня посередине. Парень посередине тычет парню слева. Парень на левой руке, парень посередине карты. Если он черный, парень посередине бросает его на пол и снова тыкает, пока не получит красную карточку, которую он затем вручает парню справа. Затем парень справа снова толкает парня посередине.
Это продолжается до тех пор, пока у парня слева не кончатся карты.
Колода не проходила от начала до конца более одного раза. Однако и парень слева, и парень посередине раздали 52 карты, а парень справа - 26 карт. , Всего было проведено 52 + 52 + 26 операций с картами, но колода проходила только один раз .
Ваша версия "LINQ" и версия "continue" - это одно и то же; если бы у вас было
foreach(var card in deck)
{
if (card.IsBlack) continue;
... use card ...
тогда есть 52 операции, которые выбирают каждую карту из колоды, 52 операции, которые проверяют, является ли каждая карта черной, и 26 операций, которые воздействуют на красную карту. Точно так же.