A predicate delegate returns true or false for each value.

predicate A predicate is a function that answers a yes-or-no question.

Predicate Filter

minimum
PredicateFilter.cs
Replay: real traced execution (multi-file project)
using System;

class Program
{
    static void Main()
    {
        int minimum = 3;
        int[] values = { 1, 3, 5, 7 };
        Func<int, bool> keep = value => value >= minimum;
        int kept = 0;
        int total = 0;

        foreach (int value in values)
        {
            if (keep(value))
            {
                kept++;
                total += value;
            }
        }

        Console.WriteLine($"minimum={minimum}");
        Console.WriteLine($"kept={kept}");
        Console.WriteLine($"total={total}");
    }
}
using System;

class Program
{
    static void Main()
    {
        int minimum = 2;
        int[] values = { 1, 3, 5, 7 };
        Func<int, bool> keep = value => value >= minimum;
        int kept = 0;
        int total = 0;

        foreach (int value in values)
        {
            if (keep(value))
            {
                kept++;
                total += value;
            }
        }

        Console.WriteLine($"minimum={minimum}");
        Console.WriteLine($"kept={kept}");
        Console.WriteLine($"total={total}");
    }
}
using System;

class Program
{
    static void Main()
    {
        int minimum = 5;
        int[] values = { 1, 3, 5, 7 };
        Func<int, bool> keep = value => value >= minimum;
        int kept = 0;
        int total = 0;

        foreach (int value in values)
        {
            if (keep(value))
            {
                kept++;
                total += value;
            }
        }

        Console.WriteLine($"minimum={minimum}");
        Console.WriteLine($"kept={kept}");
        Console.WriteLine($"total={total}");
    }
}
  1. minimum ← 3, keep ← System.Func`2[System.Int32,System.Boolean]

    4{5    static void Main()6    {7        int minimum→ 3 = 3; //@minimum=2, 58        int[] values = { 1, 3, 5, 7 };9        Func<int, bool> keep→ System.Func`2[System.Int32,System.Boolean] = value => value >= minimum;10        int kept→ 0 = 0;11        int total→ 0 = 0;
  2. foreach (int value in values)

    pass 1 of 4
    13foreach (int value1 in values)14{15    if (keep(value))
    All 4 passes — pass 1 is the card above
    passvalue
    11
    23
    35
    47
  3. kept ← 1, total ← 3

    pass 1 of 3
    14{15    if (keep(value3))16    {17        kept→ 1++;18        total→ 3 += value3;19    }
    All 3 passes — pass 1 is the card above
    passvaluekepttotal
    130 13
    251 28
    372 315
  4. Console.WriteLine($"minimum={minimum}");

    22    Console.WriteLine($"minimum={minimum3}");23    Console.WriteLine($"kept={kept3}");24    Console.WriteLine($"total={total15}");25}
    outputminimum=3
    kept=3
    total=15
  1. minimum ← 2, keep ← System.Func`2[System.Int32,System.Boolean]

    4{5    static void Main()6    {7        int minimum→ 2 = 2;8        int[] values = { 1, 3, 5, 7 };9        Func<int, bool> keep→ System.Func`2[System.Int32,System.Boolean] = value => value >= minimum;10        int kept→ 0 = 0;11        int total→ 0 = 0;
  2. foreach (int value in values)

    pass 1 of 4
    13foreach (int value1 in values)14{15    if (keep(value))
    All 4 passes — pass 1 is the card above
    passvalue
    11
    23
    35
    47
  3. kept ← 1, total ← 3

    pass 1 of 3
    14{15    if (keep(value3))16    {17        kept→ 1++;18        total→ 3 += value3;19    }
    All 3 passes — pass 1 is the card above
    passvaluekepttotal
    130 13
    251 28
    372 315
  4. Console.WriteLine($"minimum={minimum}");

    22    Console.WriteLine($"minimum={minimum2}");23    Console.WriteLine($"kept={kept3}");24    Console.WriteLine($"total={total15}");25}
    outputminimum=2
    kept=3
    total=15
  1. minimum ← 5, keep ← System.Func`2[System.Int32,System.Boolean]

    4{5    static void Main()6    {7        int minimum→ 5 = 5;8        int[] values = { 1, 3, 5, 7 };9        Func<int, bool> keep→ System.Func`2[System.Int32,System.Boolean] = value => value >= minimum;10        int kept→ 0 = 0;11        int total→ 0 = 0;
  2. foreach (int value in values)

    pass 1 of 4
    13foreach (int value1 in values)14{15    if (keep(value))
    All 4 passes — pass 1 is the card above
    passvaluekepttotal
    11
    23
    350 15
    471 212
  3. kept ← 1, total ← 5

    pass 1 of 2
    14{15    if (keep(value5))16    {17        kept→ 1++;18        total→ 5 += value5;19    }
  4. kept ← 2, total ← 12

    pass 2 of 2
    14{15    if (keep(value7))16    {17        kept→ 2++;18        total→ 12 += value7;19    }
  5. Console.WriteLine($"minimum={minimum}");

    22    Console.WriteLine($"minimum={minimum5}");23    Console.WriteLine($"kept={kept2}");24    Console.WriteLine($"total={total12}");25}
    outputminimum=5
    kept=2
    total=12