gpt4 book ai didi

c# - LINQ 中的通用扩展方法

转载 作者:太空狗 更新时间:2023-10-29 18:31:43 25 4
gpt4 key购买 nike

public static class LinqExtensions
{
public static double Variance(this IList<double> data)
{
double sumSquares=0;
double avg = data.Average();
foreach (var num in data)
{
sumSquares += (num - avg * num - avg);
}
return sumSquares / (data.Count - 1);
}
public static decimal? Variance<TSource>(this IEnumerable<TSource> source, Func<TSource, decimal?> selector)
{
//where to start for implementing?
}
}

我想为泛型做一些 LINQ 扩展。我知道如何在不使用委托(delegate)的情况下扩展 LINQ,我有几个尚未定义的类型,它们将具有我需要枚举的属性以及诸如 variance 之类的东西。如何定义我的 Variance 扩展方法以便它接受委托(delegate)?

最佳答案

你可以这样做:

public static double? Variance<TSource>(this IEnumerable<TSource> source,
Func<TSource, double> selector)
{
double sumSquares=0;
double avg = source.Average(selector);
foreach (var item in source)
{
var num = selector(item);
sumSquares += (num - avg * num - avg);
}
return sumSquares / (source.Count() - 1);
}

这里正在使用该样本 - http://dotnetfiddle.net/emPZC8

更新

使用示例:

public class Item
{
public double Val {get;set;}
}

public class Program
{
public void Main()
{
var items = new List<Item>();
items.Add(new Item(){Val=1.1});
items.Add(new Item(){Val=2.1});
items.Add(new Item(){Val=3.1});

var variance = items.Variance<Item>((i) => i.Val);
Console.WriteLine(variance);
}
}

关于c# - LINQ 中的通用扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21841579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com