我有一個動態(tài)結(jié)果集,其中包含一個鍵值 double(但編譯器仍將其視為動態(tài)結(jié)果)。我試圖計算這個的累積平均值,但無法弄清楚正確的轉(zhuǎn)換或如何調(diào)用 LinqAverage()方法的特定重載。Average<dynamic>(Func<dynamic, int> selector)當(dāng)我非常確定我需要該Average<dynamic>(Func<dynamic, double> selector)版本時,它始終會嘗試調(diào)用該版本。Average()和Sum()方法上的智能感知向我展示了編譯器正在選擇<dynamic, int>版本。如何指定使用double版本?這是我嘗試過的事情的迭代及其相應(yīng)錯誤的一個很好的示例。在這一點上,我覺得我已經(jīng)想盡組合,并使用或不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>();更新我的結(jié)果集原來有一個隱藏的null值,這導(dǎo)致了錯誤:var result = new List<dynamic>() { new { myDouble = 0.123 } , new { myDouble = 0.456 } , new { myDouble = null }}; 對于以下所有循環(huán),錯誤為: 無法將類型“double”隱式轉(zhuǎn)換為“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));對于以下所有循環(huán),錯誤為: 指定的強(qiáng)制轉(zhuǎn)換無效。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());
動態(tài)雙精度的 Linq 平均值
拉風(fēng)的咖菲貓
2021-11-21 10:16:34