Comment utiliser la méthode Aggregate?
Bonjour,
J'ai le code suivant qui plante au niveau de mon appel à Aggregate avec l'erreur "Error 1 Cannot convert lambda expression to delegate type 'System.Func<RiskFactor,RiskFactor,RiskFactor>' because some of the return types in the block are not implicitly convertible to the delegate return type
Error 2 Cannot implicitly convert type 'double' to 'RiskFactor'".
En effet il cherche à retourner un objet riskFactor alors que je cherche à avoir juste un double. Comment lui faire retourner juste le résultat de la multiplication de tous mes éléments "factor" dont le label vaut "toto"?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class RiskFactor {
public string label;
public double? factor;
}
List<RiskFactor> riskFactors = new List<RiskFactor>();
RiskFactor riskFactor;
for (int i = 1; i < 5; i++) {
riskFactor = new RiskFactor();
riskFactor.label == "toto";
riskFactor.factor = i * 2;
riskFactors.Add(riskFactor);
riskFactor = new RiskFactor();
riskFactor.label == "titi";
riskFactor.factor = i * 3;
riskFactors.Add(riskFactor);
}
double res = riskFactors.Where(x => x.label == "toto").Aggregate((x, y) => ((x.factor.HasValue ? x.factor.Value : 1) * (y.factor.HasValue ? y.factor.Value : 1))); |
Je sais que je peux faire comme ceci :
Code:
1 2 3 4 5 6
| double res = 1;
foreach (var item in riskFactors) {
if (item.label == "toto") {
res *= (item.factor.HasValue ? item.factor.Value : 1);
}
} |
Mais vu ce que je dois réellement en faire dans mon code, je voudrais savoir le faire avec LINQ.
Merci pour votre aide,