Как реализовать блок расширения C# 14 в универсальном формате?C#

Место общения программистов C#
Anonymous
Как реализовать блок расширения C# 14 в универсальном формате?

Сообщение Anonymous »

Я пытаюсь переписать одно из моих расширений в новом синтаксисе блоков. Это расширение 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;
}
}
У меня сложилось впечатление, что это будет так просто:

Код: Выделить всё

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;
}
}
}
Но я получаю ошибки:
  • Не удалось найти тип или имя пространства имен «T» (вам не хватает директивы using или ссылки на сборку?)
  • 'IEnumerable' не содержит определения для 'Select' и лучшей перегрузки метода расширения 'ImmutableArrayExtensions.Select(ImmutableArray, Func)" требуется получатель типа "System.Collections.Immutable.ImmutableArray"
Мне хотелось бы знать, как включить дженерики в блоки расширения.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -a-generic

Вернуться в «C#»