static void Main(string[] args)
{
  var popcornBags = new List<PopcornBag>(){
    new PopcornBag{ Type = PopcornBagType.Bland },
    new PopcornBag{ Type = PopcornBagType.Bland },
    new PopcornBag{ Type = PopcornBagType.WithSugar },
    new PopcornBag{ Type = PopcornBagType.WithSalt },
    new PopcornBag{ Type = PopcornBagType.WithButter },
    new PopcornBag{ Type = PopcornBagType.WithButter },
    new PopcornBag{ Type = PopcornBagType.WithButter }
  };

  var allBlandPopCornBags = popcornBags
    .deferredFilterBag(b => b.Type == PopcornBagType.Bland).ToList(); //No work is done here
  
  Console.WriteLine("Main Program: Although we have a deferred method, because we call .ToList()" +
                    "the work is all done in the line above. \n");

  //deferredFilterBag method does not do work here, 
  //it already did in line 13. We will now access the list
  //that the allBlandPopCornBags variable references.
  foreach(var bag in allBlandPopCornBags) 
    Console.WriteLine($"Main Program: We have a match and it's bland... But why do we all need to be special anyway?");
}