Как реализовать блок расширения 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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