How do I implement C# 14 extension block on a generic?
11:09 20 Nov 2025

I'm attempting to rewrite one of my extensions in the new block syntax. It's an extension on IEnumerable:

public static class IEnumerableExtensions
{
    public static double StdDev(this IEnumerable list, Func values)
    {
        // ref: https://stackoverflow.com/questions/2253874/linq-equivalent-for-standard-deviation
        var mean = 0.0;
        var sum = 0.0;
        var stdDev = 0.0;
        var n = 0;

        foreach (var value in list.Select(values))
        {
            if (value is null)
                continue;

            n++;
            var delta = value.Value - mean;
            mean += delta / n;
            sum += delta * (value.Value - mean);
        }

        if (1 < n)
            stdDev = Math.Sqrt(sum / (n - 1));

        return stdDev;
    }
}

I was under the impression it would be as simple as:

public static class IEnumerableExtensions2
{
    extension(IEnumerable list) // Bang! (1)
    {
        public double StdDev(Func values)
        {
            // ref: https://stackoverflow.com/questions/2253874/linq-equivalent-for-standard-deviation
            var mean = 0.0;
            var sum = 0.0;
            var stdDev = 0.0;
            var n = 0;

            foreach (var value in list.Select(values)) // Bang! (2)
            {
                if (value is null)
                    continue;

                n++;
                var delta = value.Value - mean;
                mean += delta / n;
                sum += delta * (value.Value - mean);
            }

            if (1 < n)
                stdDev = Math.Sqrt(sum / (n - 1));

            return stdDev;
        }
    }
}

But I receive the errors:

  1. The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?)
  2. 'IEnumerable' does not contain a definition for 'Select' and the best extension method overload 'ImmutableArrayExtensions.Select(ImmutableArray, Func)' requires a receiver of type 'System.Collections.Immutable.ImmutableArray'

I'd like to know how I can include generics in extension blocks.

c# c#-14.0