gpt4 book ai didi

c# - 动态 double 的 Linq 平均值

转载 作者:行者123 更新时间:2023-11-30 23:00:11 25 4
gpt4 key购买 nike

我有一个动态结果集,其中包含一个 double 键值(但编译器仍然将其视为动态)。我正在尝试对此进行累积平均,但无法找出正确的转换或如何调用 Linq Average() 方法的特定重载。当我非常确定我需要 Average<dynamic>(Func<dynamic, int> selector) 版本时,它始终会尝试调​​用 Average<dynamic>(Func<dynamic, double> selector) 版本。

Average()Sum() 方法上的 Intellisense 告诉我编译器正在选择 <dynamic, int> 版本。如何指定使用 double 版本?

这是我尝试过的事物的迭代及其相应错误的一个很好的示例。在这一点上,我觉得我已经尝试了所有的组合,有或没有我能想到的 Cast<double>()Convert.ToDouble()

// ## filled with values from DB query, but here with examples ##
var result = new List<dynamic>() { new { myDouble = 0.123 }, new { myDouble = 0.456 } };
var cumulativeAvg = new List<double>();

更新 我的结果集原来有一个隐藏的 null 值,这导致了错误:

var result = new List<dynamic>() {
new { myDouble = 0.123 }
, new { myDouble = 0.456 }
, new { myDouble = null }
};

对于以下所有循环,错误是:无法将类型“double”隐式转换为“int”

for(var i = 0; i < result.Count; i++)
cumulativeAvg.Add(result.Take(i + 1).Average(r => Convert.ToDouble(r.myDouble)));

for(var i = 0; i < result.Count; i++)
cumulativeAvg.Add(result.Take(i + 1).Select(r => Convert.ToDouble(r.myDouble)).Average());

for(var i = 0; i < result.Count; i++)
cumulativeAvg.Add(result.Take(i + 1).Select(r => Convert.ToDouble(r.myDouble)).ToList().Average());

for(var i = 0; i < result.Count; i++)
cumulativeAvg.Add(result.Take(i + 1).Sum(r => Convert.ToDouble(r.myDouble)) / (i + 1));

对于以下所有循环,错误是:指定的转换无效。

for(var i = 0; i < result.Count; i++)
cumulativeAvg.Add(result.Take(i + 1).Select(r => Convert.ToDouble(r.myDouble)).Cast<double>().Average());

for(var i = 0; i < result.Count; i++)
cumulativeAvg.Add(result.Take(i + 1).Cast<double>().Select(r => Convert.ToDouble(r.myDouble)).Average());

for(var i = 0; i < result.Count; i++)
cumulativeAvg.Add(result.Select(r => Convert.ToDouble(r.myDouble)).Cast<double>().Take(i + 1).Average());

最佳答案

如果您强制将动态转换为 double 而不是让 .ToDouble 方法自己找到合适的类型,它就会起作用。相反,进行显式转换:

for(var i = 0; i < result.Count; i++)
cumulativeAvg.Add(result.Take(i + 1).Average(r => (double)r.myDouble));

关于c# - 动态 double 的 Linq 平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51753106/

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